44 #ifndef Included_RexxString
45 #define Included_RexxString
54 #define STRING_BAD_VARIABLE 0
56 #define STRING_COMPOUND_NAME 2
57 #define STRING_LITERAL 3
58 #define STRING_LITERAL_DOT 4
59 #define STRING_NUMERIC 5
62 #define STRING_HASLOWER 0x01
63 #define STRING_NOLOWER 0x02
64 #define STRING_NONNUMERIC 0x04
65 #define STRING_ISASCII_CHECKED 0x08
66 #define STRING_ISASCII 0x10
68 #define INITIAL_NAME_SIZE 10
69 #define EXTENDED_NAME_SIZE 10
71 #define STRIP_BOTH 'B'
72 #define STRIP_LEADING 'L'
73 #define STRIP_TRAILING 'T'
75 #define DATATYPE_ALPHANUMERIC 'A'
76 #define DATATYPE_BINARY 'B'
77 #define DATATYPE_LOWERCASE 'L'
78 #define DATATYPE_MIXEDCASE 'M'
79 #define DATATYPE_NUMBER 'N'
80 #define DATATYPE_SYMBOL 'S'
81 #define DATATYPE_VARIABLE 'V'
82 #define DATATYPE_UPPERCASE 'U'
83 #define DATATYPE_WHOLE_NUMBER 'W'
84 #define DATATYPE_HEX 'X'
85 #define DATATYPE_9DIGITS '9'
86 #define DATATYPE_LOGICAL 'O'
88 #define VERIFY_MATCH 'M'
89 #define VERIFY_NOMATCH 'N'
95 #define HEX_CHAR_STR "0123456789ABCDEFabcdef"
97 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
99 #define LOWER_ALPHA "abcdefghijklmnopqrstuvwxyz"
100 #define MIXED_ALPHA \
101 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
102 #define UPPER_ALPHA "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
118 return "0123456789ABCDEF"[n];
123 inline void *
operator new(
size_t size,
void *ptr){
return ptr;};
404 if (compareLength > other->
blength) {
405 compareLength = other->
blength;
412 else if (blength < other->
blength) {
421 if (compareLength > other->
blength) {
422 compareLength = other->
blength;
429 else if (blength < other->
blength) {
440 if (stringLength > other->
clength) {
443 stringLength = stringLength - startCol + 1;
444 sizeC_t compareLength = colLength;
445 if (compareLength > stringLength) {
446 compareLength = stringLength;
450 if (result == 0 && stringLength < colLength) {
454 else if (clength < other->
clength) {
474 if (stringLength > other->
clength) {
477 stringLength = stringLength - startCol + 1;
478 sizeC_t compareLength = colLength;
479 if (compareLength > stringLength) {
480 compareLength = stringLength;
484 if (result == 0 && stringLength < colLength) {
488 else if (clength < other->
clength) {
559 va_start(args, format);
562 s->
finish(n >= 0 ? n : 0);
591 return new_string(
string, strlen(
string), -1);
629 inline void *
operator new(size_t,
void *ptr) {
return ptr; }
630 inline void operator delete(
void *,
void *) { ; }
631 void *
operator new(size_t);
632 inline void operator delete(
void *) { ; }
RexxObject *(RexxObject::* PCPPM)()
void * rmemcpy(void *t, RexxString *s, sizeB_t blen)
int rmemcmp(const void *t, RexxString *s, sizeB_t blen)
char * rstrcat(char *t, RexxString *s)
#define STRING_NONNUMERIC
char * rstrcpy(char *t, RexxString *s)
#define STRING_ISASCII_CHECKED
RexxString * new_proxy(const char *name)
RexxString * new_string(const char *s, stringsizeB_t bl, sizeC_t cl=-1)
char IntToHexDigit(int n)
RexxString * raw_string(stringsizeB_t bl, stringsizeC_t cl=-1)
int rstrcmp(const char *t, RexxString *s)
RexxString * new_upper_string(const char *s, stringsizeB_t bl, stringsizeC_t cl=-1)
int rsnprintf(RexxString *s, const char *format,...)
RexxMessage * start(RexxObject **, size_t, size_t)
RexxObject * makeArrayRexx()
RexxString * stringValue()
RexxString * extractC(sizeC_t offset, sizeC_t sublength)
bool numberValue(wholenumber_t &result, size_t precision)
RexxInteger * isLessOrEqual(RexxObject *)
RexxArray * subWords(RexxInteger *, RexxInteger *)
RexxInteger * isLessThan(RexxObject *)
RexxString * concatRexx(RexxObject *)
static void createInstance()
RexxInteger * strictEqual(RexxObject *)
static RexxString * newString(const char *, sizeB_t bl, sizeC_t cl=-1)
RexxInteger * caselessEquals(RexxString *other)
static RexxString * newProxy(const char *)
RexxString * extractB(sizeB_t offset, sizeB_t sublength)
RexxObject * trunc(RexxInteger *decimals)
RexxString * changeStr(RexxString *, RexxString *, RexxInteger *)
RexxInteger * caselessLastPosRexx(RexxString *, RexxInteger *, RexxInteger *)
void toRxstring(CONSTRXSTRING &r)
RexxObject * xorOp(RexxObject *)
RexxString * translate(RexxString *, RexxString *, RexxString *, RexxInteger *, RexxInteger *)
RexxObject * operatorNot(RexxObject *)
RexxObject * Min(RexxObject **args, size_t argCount, size_t named_argCount)
RexxString * bitOr(RexxString *, RexxString *)
bool primitiveCaselessIsEqual(RexxObject *)
bool strCaselessCompare(const char *s)
RexxInteger * primitiveCompareTo(RexxString *other, stringsizeC_t start, stringsizeC_t len)
RexxInteger * strictGreaterThan(RexxObject *)
RexxObject * evaluate(RexxActivation *, RexxExpressionStack *)
RexxString * delstr(RexxInteger *, RexxInteger *)
RexxString * upperRexx(RexxInteger *, RexxInteger *)
int sortCompare(RexxString *other, sizeC_t startCol, sizeC_t colLength)
HashCode getObjectHashCode()
RexxString * bitAnd(RexxString *, RexxString *)
RexxInteger * wordIndex(RexxInteger *)
RexxInteger * notEqual(RexxObject *)
RexxInteger * strictLessOrEqual(RexxObject *)
const char * caselessLastPos(const char *needle, sizeB_t needleLen, const char *haystack, sizeB_t haystackLen)
RexxInteger * primitiveCaselessCompareTo(RexxString *other, stringsizeC_t start, stringsizeC_t len)
RexxNumberString * createNumberString()
RexxString * overlay(RexxString *, RexxInteger *, RexxInteger *, RexxString *)
RexxObject * lengthRexx()
RexxInteger * abbrev(RexxString *, RexxInteger *)
RexxNumberString * fastNumberString()
RexxObject * format(RexxObject *Integers, RexxObject *Decimals, RexxObject *MathExp, RexxObject *ExpTrigger)
bool doubleValue(double &result)
void toRxstring(RXSTRING &r)
void liveGeneral(int reason)
RexxInteger * caselessMatchChar(RexxInteger *position_, RexxString *matchSet)
void setBLength(sizeB_t l)
RexxString * makeString()
RexxString * subWord(RexxInteger *, RexxInteger *)
RexxObject * logicalOperation(RexxObject *, RexxObject *, unsigned int)
const char * getStringData()
RexxInteger * verify(RexxString *, RexxString *, RexxInteger *, RexxInteger *)
RexxInteger * caselessMatch(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxString * caselessChangeStr(RexxString *, RexxString *, RexxInteger *)
RexxString * space(RexxInteger *, RexxString *)
RexxString * encodeBase64()
RexxInteger * caselessPosRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxObject * integerDivide(RexxObject *right)
void setNumberString(RexxObject *)
bool primitiveMatch(stringsizeC_t start, RexxString *other, stringsizeC_t offset, stringsizeC_t len)
RexxObject * remainder(RexxObject *right)
RexxString * d2x(RexxInteger *)
RexxObject * Max(RexxObject **args, size_t argCount, size_t named_argCount)
RexxInteger * integerValue(size_t precision)
RexxInteger * match(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxString * concatBlank(RexxObject *)
RexxInteger * caselessCountStrRexx(RexxString *)
RexxNumberString * numberString()
void setCLength(sizeC_t l)
RexxString * d2c(RexxInteger *)
RexxInteger * lastPosRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxString * x2dC2d(RexxInteger *, bool)
RexxInteger * compareToRexx(RexxString *other, RexxInteger *start_, RexxInteger *len_)
RexxObject * getRealValue(RexxActivation *)
RexxInteger * compare(RexxString *, RexxString *)
char putCharB(sizeB_t p, char c)
bool primitiveIsEqual(RexxObject *)
RexxObject * plus(RexxObject *right)
int sortCaselessCompare(RexxString *other)
bool primitiveCaselessMatch(stringsizeC_t start, RexxString *other, stringsizeC_t offset, stringsizeC_t len)
RexxInteger * caselessCompare(RexxString *, RexxString *)
RexxInteger * strictLessThan(RexxObject *)
RexxInteger * strictGreaterOrEqual(RexxObject *)
bool memCompare(RexxString *other)
sizeC_t caselessPos(RexxString *, sizeC_t)
RexxString * extract(size_t offset, size_t sublength)
RexxString * bitXor(RexxString *, RexxString *)
RexxString * word(RexxInteger *)
void flatten(RexxEnvelope *envelope)
RexxString * x2d(RexxInteger *)
RexxString * left(RexxInteger *, RexxString *)
RexxInteger * matchChar(RexxInteger *position_, RexxString *matchSet)
bool memCompare(const char *s, sizeB_t l)
RexxInteger * equal(RexxObject *)
RexxObject * multiply(RexxObject *right)
RexxString * subchar(RexxInteger *)
RexxString * substr(RexxInteger *, RexxInteger *, RexxString *)
RexxString * replaceAt(RexxString *, RexxInteger *, RexxInteger *, RexxString *)
RexxString * concatWithCstring(const char *)
RexxObject * dataType(RexxString *)
static RexxClass * classInstance
virtual bool logicalValue(logical_t &)
RexxObject * andOp(RexxObject *)
size_t caselessCountStr(RexxString *)
bool isEqual(RexxObject *)
wholenumber_t comp(RexxObject *, RexxString *alternativeOperator=OREF_NULL, RexxInteger **alternativeOperatorResultPtr=NULL)
virtual HashCode getHashValue()
sizeC_t lastPos(RexxString *needle, sizeC_t start)
RexxInteger * caselessWordPos(RexxString *, RexxInteger *)
RexxString * concat(RexxString *)
RexxString * concatWith(RexxString *, char)
static RexxString * newUpperString(const char *, stringsizeB_t bl, stringsizeC_t cl=-1)
RexxString * c2d(RexxInteger *)
RexxObject * getValue(RexxActivation *)
RexxInteger * caselessCompareToRexx(RexxString *other, RexxInteger *start_, RexxInteger *len_)
bool endsWith(codepoint_t c)
sizeC_t pos(RexxString *, sizeC_t)
void set(sizeB_t s, int c, sizeB_t l)
RexxInteger * posRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxString * stringTrace()
RexxInteger * wordLength(RexxInteger *)
RexxString * concatToCstring(const char *)
wholenumber_t compareTo(RexxObject *)
void put(sizeB_t s, RexxString *o)
RexxNumberString * NumberString
RexxString * copies(RexxInteger *)
RexxString * right(RexxInteger *, RexxString *)
sizeC_t caselessLastPos(RexxString *needle, sizeC_t start)
bool strCompare(const char *s)
void copyToRxstring(RXSTRING &r)
void put(sizeB_t s, const void *b, sizeB_t l)
codepoint_t getCharC(sizeC_t p)
sizeB_t copyData(sizeB_t, char *, sizeB_t)
RexxInteger * isASCIIRexx()
RexxInteger * countStrRexx(RexxString *)
int sortCaselessCompare(RexxString *other, sizeC_t startCol, sizeC_t colLength)
RexxInteger * wordPos(RexxString *, RexxInteger *)
RexxInteger * caselessAbbrev(RexxString *, RexxInteger *)
RexxInteger * isGreaterOrEqual(RexxObject *)
RexxObject * orOp(RexxObject *)
RexxString * newRexx(RexxObject **, size_t, size_t)
RexxObject * divide(RexxObject *right)
int sortCompare(RexxString *other)
static RexxString * rawString(sizeB_t bl, sizeC_t cl=-1)
RexxObject * unflatten(RexxEnvelope *)
RexxString * insert(RexxString *, RexxInteger *, RexxInteger *, RexxString *)
RexxString * strip(RexxString *, RexxString *)
void finish(stringsizeB_t bl, sizeC_t cl=-1)
RexxString * delWord(RexxInteger *, RexxInteger *)
RexxInteger * equals(RexxString *other)
RexxInteger * isGreaterThan(RexxObject *)
RexxString(RESTORETYPE restoreType)
wholenumber_t strictComp(RexxObject *, RexxString *alternativeOperator=NULL, RexxInteger **alternativeOperatorResultPtr=NULL)
RexxObject * power(RexxObject *right)
RexxString * decodeBase64()
RexxString * lowerRexx(RexxInteger *, RexxInteger *)
bool unsignedNumberValue(uwholenumber_t &result, size_t precision)
static PCPPM operatorMethods[]
RexxString * primitiveMakeString()
RexxInteger * strictNotEqual(RexxObject *)
RexxString * center(RexxInteger *, RexxString *)
RexxObject * minus(RexxObject *right)
void copyIntoTail(RexxCompoundTail *buffer)
void liveGeneral(int reason)
static RexxClass * classInstance
void flatten(RexxEnvelope *)
RexxText(RESTORETYPE restoreType)
static void createInstance()
static int caselessCompare(const char *, const char *, sizeB_t)
static int strCaselessCompare(const char *opt1, const char *opt2)
static int vsnprintf(char *buffer, size_t count, const char *format, va_list args)
stringsize_t stringsizeC_t
stringsize_t stringsizeB_t