69 #define DEFAULT_BUFFER_LENGTH 256
90 string = OREF_NULLSTRING;
95 string = OREF_NULLSTRING;
104 defaultSize = bufferLength;
110 bufferLength =
string->getBLength();
119 newBuffer->
sendMessage(OREF_INIT, args, argc > 2 ? argc - 2 : 0, named_argc);
167 void *RexxMutableBuffer::operator
new(
size_t size)
182 void *RexxMutableBuffer::operator
new(
size_t size,
RexxClass *bufferClass)
185 newObj->
setBehaviour(bufferClass->getInstanceBehaviour());
283 if (newLength > capacity)
285 newLength = capacity;
292 if (newLength > oldLength)
294 this->
setData(oldLength,
'\0', newLength - oldLength);
380 sizeB_t padLength = insertLength - copyLength;
388 if (insertLength == 0)
497 sizeB_t newLength =
string->getBLength();
522 finalLength = begin - replaceLength + newLength;
526 finalLength =
dataBLength - replaceLength + newLength;
546 if (replaceLength != newLength && begin + replaceLength <
dataBLength)
549 adjustGap(begin, replaceLength, newLength);
861 sizeB_t resultLength = this->
getBLength() - (matches * needleLength) + (matches * newLength);
868 if (needleLength == newLength)
873 for (
size_t i = 0; i < matches; i++)
880 _start = matchPos + newLength - 1;
884 else if (needleLength > newLength)
894 for (
size_t i = 0; i < matches; i++)
898 sizeB_t copyLength = (matchPos - 1) - _start;
902 copyData(copyOffset, source + _start, copyLength);
903 copyOffset += copyLength;
908 copyData(copyOffset, newPtr, newLength);
909 copyOffset += newLength;
911 _start = matchPos + needleLength - 1;
914 if (_start < sourceLength)
916 copyData(copyOffset, source + _start, sourceLength - _start);
923 sizeB_t growth = (newLength - needleLength) * matches;
933 openGap(0, growth, sourceLength);
936 for (
size_t i = 0; i < matches; i++)
940 sizeB_t copyLength = (matchPos - 1) - _start;
944 copyData(copyOffset, source + _start, copyLength);
945 copyOffset += copyLength;
950 copyData(copyOffset, newPtr, newLength);
951 copyOffset += newLength;
953 _start = matchPos + needleLength - 1;
956 if (_start < sourceLength)
958 copyData(copyOffset, source + _start, sourceLength - _start);
1002 sizeB_t resultLength = this->
getBLength() - (matches * needleLength) + (matches * newLength);
1009 if (needleLength == newLength)
1014 for (
size_t i = 0; i < matches; i++)
1021 _start = matchPos + newLength - 1;
1025 else if (needleLength > newLength)
1035 for (
size_t i = 0; i < matches; i++)
1039 sizeB_t copyLength = (matchPos - 1) - _start;
1041 if (copyLength != 0)
1043 copyData(copyOffset, source + _start, copyLength);
1044 copyOffset += copyLength;
1049 copyData(copyOffset, newPtr, newLength);
1050 copyOffset += newLength;
1052 _start = matchPos + needleLength - 1;
1055 if (_start < sourceLength)
1057 copyData(copyOffset, source + _start, sourceLength - _start);
1064 sizeB_t growth = (newLength - needleLength) * matches;
1074 openGap(0, growth, sourceLength);
1077 for (
size_t i = 0; i < matches; i++)
1081 sizeB_t copyLength = (matchPos - 1) - _start;
1083 if (copyLength != 0)
1085 copyData(copyOffset, source + _start, copyLength);
1086 copyOffset += copyLength;
1091 copyData(copyOffset, newPtr, newLength);
1092 copyOffset += newLength;
1094 _start = matchPos + needleLength - 1;
1097 if (_start < sourceLength)
1099 copyData(copyOffset, source + _start, sourceLength - _start);
1133 if (rangeLength == 0)
1138 char *bufferData =
getData() + startPos;
1140 for (
size_t i = 0; i < rangeLength; i++)
1142 *bufferData = tolower(*bufferData);
1174 if (rangeLength == 0)
1179 char *bufferData =
getData() + startPos;
1181 for (
size_t i = 0; i < rangeLength; i++)
1183 *bufferData = toupper(*bufferData);
1207 return this->
upper(_start, _range);
1231 char *scanPtr =
getData() + startPos - 1;
1234 while (scanLength-- != 0)
1239 if (tablei != OREF_NULLSTRING)
1246 position = ((size_t)ch) & 0xff;
1248 if (position != (
size_t)(-1))
1250 if (position < outTableLength)
1253 *scanPtr = *(outTable + position);
1301 if ((offset + len - 1) > other->
getBLength())
1345 if ((offset + len - 1) > other->
getBLength())
1435 if (_matchChar == matchSet->
getCharB(i))
1468 _matchChar = toupper(_matchChar);
1474 if (_matchChar == toupper(matchSet->
getCharB(i)))
1649 const char *nextSite = NULL;
1652 while (--_wordPos > 0 && _wordLength != 0)
1664 while (--count > 0 && _wordLength != 0)
1677 closeGap(deletePosition, gapSize, length);
1705 const char padC =
' ';
1725 const char *nextSite = NULL;
1731 while (_wordLength != 0)
1734 copyData(writePos, _word, _wordLength);
1735 writePos += _wordLength;
1739 if (_wordLength == 0)
1746 setData(writePos, padChar, padLength);
1747 writePos += padLength;
1752 setData(writePos, padC, padL);
1759 if ( padLength > 1 )
1761 sizeB_t growth = count * (padLength-1);
1771 setData(writePos, padC, padL);
1780 const char *nextSite = NULL;
1785 while (_wordLength != 0)
1788 copyData(writePos, _word, _wordLength);
1789 writePos += _wordLength;
1793 if (_wordLength != 0)
1795 setData(writePos, padChar, padLength);
1796 writePos += padLength;
void reportException(wholenumber_t error)
RexxBuffer * new_buffer(sizeB_t s)
RexxInteger * new_integer(wholenumber_t v)
#define DEFAULT_BUFFER_LENGTH
codepoint_t optionalPadArgument(RexxObject *o, codepoint_t d, size_t p)
RexxString * stringArgument(RexxObject *object, RexxString *kind, size_t position)
size_t optionalPositive(RexxObject *o, size_t d, RexxString *kind, size_t p)
size_t optionalNonNegative(RexxObject *o, size_t d, RexxString *kind, size_t p)
size_t optionalLengthArgument(RexxObject *o, size_t d, size_t p)
size_t optionalPositionArgument(RexxObject *o, size_t d, size_t p)
RexxString * optionalStringArgument(RexxObject *o, RexxString *d, RexxString *kind, size_t p)
#define Error_Incorrect_method_position
#define Error_Incorrect_method_length
#define memory_mark(oref)
RexxObject * new_object(size_t s)
#define flatten_reference(oref, envel)
#define CLASS_CREATE(name, id, className)
#define memory_mark_general(oref)
#define setUpFlatten(type)
RexxString * new_string(const char *s, stringsizeB_t bl, sizeC_t cl=-1)
stringsize_t positionArgument(RexxObject *argument, size_t position)
stringsize_t lengthArgument(RexxObject *argument, size_t position)
static const wholenumber_t MAX_WHOLENUMBER
static wholenumber_t minVal(wholenumber_t n1, wholenumber_t n2)
void setDataLength(sizeB_t l)
void copyData(sizeB_t offset, const char *string, sizeB_t l)
void setBehaviour(RexxBehaviour *b)
RexxMutableBuffer * newRexx(RexxObject **, size_t, size_t)
RexxMutableBuffer * appendCstring(const char *, sizeB_t blength)
RexxInteger * caselessLastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxMutableBuffer * caselessChangeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg)
RexxMutableBuffer * translate(RexxString *tableo, RexxString *tablei, RexxString *pad, RexxInteger *, RexxInteger *)
bool primitiveMatch(stringsizeB_t start, RexxString *other, stringsizeB_t offset, stringsizeB_t len)
void closeGap(sizeB_t offset, sizeB_t _size, sizeB_t tailSize)
RexxString * subchar(RexxInteger *startPosition)
char getCharB(sizeB_t offset)
RexxMutableBuffer * mydelete(RexxObject *, RexxObject *)
RexxArray * subWords(RexxInteger *, RexxInteger *)
RexxMutableBuffer * changeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg)
void liveGeneral(int reason)
sizeB_t setDataLength(sizeB_t l)
void adjustGap(sizeB_t offset, sizeB_t _size, sizeB_t _newSize)
void openGap(sizeB_t offset, sizeB_t _size, sizeB_t tailSize)
RexxInteger * verify(RexxString *, RexxString *, RexxInteger *, RexxInteger *)
RexxMutableBuffer * lower(RexxInteger *_start, RexxInteger *_length)
static void createInstance()
void flatten(RexxEnvelope *envelope)
const char * getStringData()
RexxMutableBuffer * append(RexxObject *)
void setBLength(sizeB_t l)
RexxInteger * posRexx(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxMutableBuffer * space(RexxInteger *space_count, RexxString *pad)
RexxMutableBuffer * delWord(RexxInteger *position, RexxInteger *plength)
RexxInteger * wordPos(RexxString *, RexxInteger *)
void setData(sizeB_t offset, char character, sizeB_t l)
bool primitiveCaselessMatch(stringsizeB_t start, RexxString *other, stringsizeB_t offset, stringsizeB_t len)
RexxInteger * caselessWordPos(RexxString *, RexxInteger *)
void ensureCapacity(sizeB_t addedLength)
RexxInteger * caselessMatch(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxMutableBuffer * upper(RexxInteger *_start, RexxInteger *_length)
RexxInteger * countStrRexx(RexxString *needle)
RexxInteger * matchChar(RexxInteger *position_, RexxString *matchSet)
RexxString * makeString()
RexxObject * lengthRexx()
RexxInteger * caselessCountStrRexx(RexxString *needle)
char * setCapacity(sizeB_t newLength)
void copyData(sizeB_t offset, const char *string, sizeB_t l)
RexxInteger * wordLength(RexxInteger *)
RexxInteger * wordIndex(RexxInteger *)
RexxObject * setBufferSize(RexxInteger *)
static RexxClass * classInstance
RexxInteger * lastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxMutableBuffer * overlay(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
RexxInteger * caselessMatchChar(RexxInteger *position_, RexxString *matchSet)
RexxMutableBuffer * replaceAt(RexxObject *str, RexxObject *pos, RexxObject *len, RexxObject *pad)
RexxString * subWord(RexxInteger *, RexxInteger *)
RexxString * primitiveMakeString()
RexxObject * setBufferLength(sizeB_t)
RexxInteger * match(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxInteger * caselessPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxString * word(RexxInteger *)
RexxString * substr(RexxInteger *startPosition, RexxInteger *len, RexxString *pad)
RexxMutableBuffer * insert(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
void sendMessage(RexxString *, RexxArray *, RexxDirectory *, ProtectedObject &)
RexxObject * makeArrayRexx()
const char * getStringData()
static RexxInteger * posRexx(const char *stringData, sizeB_t length, RexxString *needle, RexxInteger *pstart, RexxInteger *range)
static RexxInteger * wordIndex(const char *data, sizeB_t length, RexxInteger *position)
static size_t memPos(const char *string, sizeB_t length, char target)
static sizeB_t caselessLastPos(const char *stringData, sizeB_t haystackLen, RexxString *needle, sizeB_t _start, sizeB_t range)
static RexxString * substr(const char *, sizeB_t, RexxInteger *, RexxInteger *, RexxString *)
static size_t caselessCountStr(const char *hayStack, sizeB_t hayStackLength, RexxString *needle)
static RexxString * word(const char *data, sizeB_t length, RexxInteger *position)
static void skipBlanks(const char **String, sizeB_t *StringLength)
static RexxInteger * wordPos(const char *data, sizeB_t length, RexxString *phrase, RexxInteger *pstart)
static RexxInteger * verify(const char *data, sizeB_t stringLen, RexxString *ref, RexxString *option, RexxInteger *_start, RexxInteger *range)
static RexxInteger * wordLength(const char *data, sizeB_t length, RexxInteger *position)
static RexxInteger * caselessWordPos(const char *data, sizeB_t length, RexxString *phrase, RexxInteger *pstart)
static RexxArray * subWords(const char *data, sizeB_t length, RexxInteger *position, RexxInteger *plength)
static size_t countStr(const char *hayStack, sizeB_t hayStackLength, RexxString *needle)
static sizeB_t pos(const char *stringData, sizeB_t haystack_length, RexxString *needle, sizeB_t _start, sizeB_t _range)
static RexxString * subWord(const char *data, sizeB_t length, RexxInteger *position, RexxInteger *plength)
static size_t wordCount(const char *String, sizeB_t StringLength)
static sizeB_t nextWord(const char **String, sizeB_t *StringLength, const char **NextString)
static RexxInteger * lastPosRexx(const char *stringData, sizeB_t haystackLen, RexxString *needle, RexxInteger *_start, RexxInteger *_range)
static sizeB_t caselessPos(const char *stringData, sizeB_t haystack_length, RexxString *needle, sizeB_t _start, sizeB_t _range)
static int caselessCompare(const char *, const char *, sizeB_t)
static RexxArray * makearray(const char *start, sizeB_t length, RexxString *separator)
static RexxString * subchar(const char *stringData, sizeB_t stringLength, RexxInteger *positionArg)
stringsize_t stringsizeB_t