ooRexx  4.2.0-source
About: ooRexx (Open Object Rexx) is a free implementation of Object Rexx. Object Rexx is an enhancement of the classic Rexx interpreter; a full-featured programming language with a human-oriented syntax.
  Fossies Dox: ooRexx-4.2.0-source.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

MutableBufferClass.hpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5 /* */
6 /* This program and the accompanying materials are made available under */
7 /* the terms of the Common Public License v1.0 which accompanies this */
8 /* distribution. A copy is also available at the following address: */
9 /* http://www.oorexx.org/license.html */
10 /* */
11 /* Redistribution and use in source and binary forms, with or */
12 /* without modification, are permitted provided that the following */
13 /* conditions are met: */
14 /* */
15 /* Redistributions of source code must retain the above copyright */
16 /* notice, this list of conditions and the following disclaimer. */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in */
19 /* the documentation and/or other materials provided with the distribution. */
20 /* */
21 /* Neither the name of Rexx Language Association nor the names */
22 /* of its contributors may be used to endorse or promote products */
23 /* derived from this software without specific prior written permission. */
24 /* */
25 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28 /* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31 /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33 /* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36 /* */
37 /*----------------------------------------------------------------------------*/
38 /******************************************************************************/
39 /* REXX Kernel MutableBufferClass.hpp */
40 /* */
41 /* Primitive MutableBuffer Class Definition */
42 /* */
43 /******************************************************************************/
44 #ifndef Included_RexxMutableBuffer
45 #define Included_RexxMutableBuffer
46 
47 #include "StringClass.hpp"
48 #include "IntegerClass.hpp"
49 #include "BufferClass.hpp"
50 
51 class RexxMutableBuffer;
52 class RexxClass;
53 
55  public:
56  RexxMutableBufferClass(RESTORETYPE restoreType) { ; };
57  void *operator new(size_t size, void *ptr) { return ptr; };
59 };
60 
61  class RexxMutableBuffer : public RexxObject {
62  friend class RexxMutableBufferClass;
63  public:
64  inline void *operator new(size_t size, void *ptr){return ptr;};
65  void *operator new(size_t size, RexxClass *bufferClass);
66  void *operator new(size_t size);
68  RexxMutableBuffer(size_t, size_t);
69  inline RexxMutableBuffer(RESTORETYPE restoreType) { ; };
70 
71  void live(size_t);
72  void liveGeneral(int reason);
73  void flatten(RexxEnvelope *envelope);
74 
75  RexxObject *copy();
76  void ensureCapacity(size_t addedLength);
77 
79 
85  RexxString *substr(RexxInteger *startPosition, RexxInteger *len, RexxString *pad);
86  RexxInteger *lastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range);
87  RexxInteger *posRexx(RexxString *needle, RexxInteger *_start, RexxInteger *_range);
88  RexxInteger *caselessLastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range);
89  RexxInteger *caselessPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range);
90  RexxString *subchar(RexxInteger *startPosition);
91 
100  RexxMutableBuffer *changeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg);
101  RexxMutableBuffer *caselessChangeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg);
102  RexxMutableBuffer *upper(RexxInteger *_start, RexxInteger *_length);
103  RexxMutableBuffer *lower(RexxInteger *_start, RexxInteger *_length);
105  RexxInteger *match(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_);
106  RexxInteger *caselessMatch(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_);
109  RexxInteger *matchChar(RexxInteger *position_, RexxString *matchSet);
110  RexxInteger *caselessMatchChar(RexxInteger *position_, RexxString *matchSet);
117  RexxInteger *words();
120  RexxMutableBuffer *delWord(RexxInteger *position, RexxInteger *plength);
121  RexxMutableBuffer *space(RexxInteger *space_count, RexxString *pad);
122 
123  inline const char *getStringData() { return data->getData(); }
124  inline size_t getLength() { return dataLength; }
125  inline char * getData() { return data->getData(); }
126  inline void copyData(size_t offset, const char *string, size_t l) { data->copyData(offset, string, l); }
127  inline void openGap(size_t offset, size_t _size, size_t tailSize) { data->openGap(offset, _size, tailSize); }
128  inline void closeGap(size_t offset, size_t _size, size_t tailSize) { data->closeGap(offset, _size, tailSize); }
129  inline void adjustGap(size_t offset, size_t _size, size_t _newSize) { data->adjustGap(offset, _size, _newSize, dataLength); }
130  inline void setData(size_t offset, char character, size_t l) { data->setData(offset, character, l); }
131  size_t setDataLength(size_t l);
132  inline char getChar(size_t offset) { return getData()[offset]; }
133  inline size_t getCapacity() { return bufferLength; }
134  char *setCapacity(size_t newLength);
135 
136 
137  static void createInstance();
139 
140  protected:
141  size_t bufferLength; /* buffer length */
142  size_t defaultSize; /* default size when emptied */
143  size_t dataLength; // current length of data
144  RexxBuffer *data; /* buffer used for the data */
145  };
146 #endif
RexxMutableBuffer::posRexx
RexxInteger * posRexx(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
Definition: MutableBufferClass.cpp:655
RexxMutableBuffer::upper
RexxMutableBuffer * upper(RexxInteger *_start, RexxInteger *_length)
Definition: MutableBufferClass.cpp:1098
RexxArray
Definition: ArrayClass.hpp:100
RexxMutableBuffer::caselessWordPos
RexxInteger * caselessWordPos(RexxString *, RexxInteger *)
Definition: MutableBufferClass.cpp:1539
RexxMutableBuffer::caselessChangeStr
RexxMutableBuffer * caselessChangeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg)
Definition: MutableBufferClass.cpp:919
RexxMutableBuffer::setCapacity
char * setCapacity(size_t newLength)
Definition: MutableBufferClass.cpp:301
RexxMutableBuffer::classInstance
static RexxClass * classInstance
Definition: MutableBufferClass.hpp:138
RexxMutableBuffer::append
RexxMutableBuffer * append(RexxObject *)
Definition: MutableBufferClass.cpp:325
new_integer
RexxInteger * new_integer(wholenumber_t v)
Definition: IntegerClass.hpp:198
RexxMutableBuffer::lengthRexx
RexxObject * lengthRexx()
Definition: MutableBufferClass.cpp:319
RexxMutableBuffer
Definition: MutableBufferClass.hpp:61
RexxMutableBuffer::matchChar
RexxInteger * matchChar(RexxInteger *position_, RexxString *matchSet)
Definition: MutableBufferClass.cpp:1351
RexxMutableBuffer::overlay
RexxMutableBuffer * overlay(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
Definition: MutableBufferClass.cpp:407
IntegerClass.hpp
RexxMutableBuffer::primitiveMatch
bool primitiveMatch(stringsize_t start, RexxString *other, stringsize_t offset, stringsize_t len)
Definition: MutableBufferClass.cpp:1298
RexxMutableBuffer::flatten
void flatten(RexxEnvelope *envelope)
Definition: MutableBufferClass.cpp:205
RexxMutableBuffer::data
RexxBuffer * data
Definition: MutableBufferClass.hpp:144
RexxMutableBuffer::createInstance
static void createInstance()
Definition: MutableBufferClass.cpp:63
RexxMutableBuffer::replaceAt
RexxMutableBuffer * replaceAt(RexxObject *str, RexxObject *pos, RexxObject *len, RexxObject *pad)
Definition: MutableBufferClass.cpp:465
RexxMutableBuffer::bufferLength
size_t bufferLength
Definition: MutableBufferClass.hpp:141
RexxMutableBuffer::lower
RexxMutableBuffer * lower(RexxInteger *_start, RexxInteger *_length)
Definition: MutableBufferClass.cpp:1058
RexxMutableBuffer::substr
RexxString * substr(RexxInteger *startPosition, RexxInteger *len, RexxString *pad)
Definition: MutableBufferClass.cpp:638
RexxMutableBuffer::subchar
RexxString * subchar(RexxInteger *startPosition)
Definition: MutableBufferClass.cpp:735
RexxMutableBuffer::primitiveCaselessMatch
bool primitiveCaselessMatch(stringsize_t start, RexxString *other, stringsize_t offset, stringsize_t len)
Definition: MutableBufferClass.cpp:1325
RexxMutableBuffer::match
RexxInteger * match(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
Definition: MutableBufferClass.cpp:1216
RexxMutableBuffer::setDataLength
size_t setDataLength(size_t l)
Definition: MutableBufferClass.cpp:273
RexxMutableBuffer::delWord
RexxMutableBuffer * delWord(RexxInteger *position, RexxInteger *plength)
Definition: MutableBufferClass.cpp:1553
RexxMutableBuffer::RexxMutableBuffer
RexxMutableBuffer()
Definition: MutableBufferClass.cpp:125
RexxMutableBuffer::getChar
char getChar(size_t offset)
Definition: MutableBufferClass.hpp:132
RexxMutableBuffer::insert
RexxMutableBuffer * insert(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
Definition: MutableBufferClass.cpp:341
RexxMutableBuffer::changeStr
RexxMutableBuffer * changeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg)
Definition: MutableBufferClass.cpp:781
RexxMutableBuffer::copyData
void copyData(size_t offset, const char *string, size_t l)
Definition: MutableBufferClass.hpp:126
RexxMutableBuffer::wordPos
RexxInteger * wordPos(RexxString *, RexxInteger *)
Definition: MutableBufferClass.cpp:1525
RexxMutableBuffer::closeGap
void closeGap(size_t offset, size_t _size, size_t tailSize)
Definition: MutableBufferClass.hpp:128
RexxMutableBuffer::setData
void setData(size_t offset, char character, size_t l)
Definition: MutableBufferClass.hpp:130
RexxEnvelope
Definition: RexxEnvelope.hpp:53
RexxBuffer
Definition: BufferClass.hpp:91
RexxBufferBase::closeGap
void closeGap(size_t offset, size_t _size, size_t tailSize)
Definition: BufferClass.hpp:64
RexxObject::makeArrayRexx
RexxObject * makeArrayRexx()
Definition: ObjectClass.cpp:2477
RexxMutableBuffer::caselessCountStrRexx
RexxInteger * caselessCountStrRexx(RexxString *needle)
Definition: MutableBufferClass.cpp:761
RexxMutableBuffer::dataLength
size_t dataLength
Definition: MutableBufferClass.hpp:143
RexxMutableBufferClass
Definition: MutableBufferClass.hpp:54
RexxMutableBuffer::space
RexxMutableBuffer * space(RexxInteger *space_count, RexxString *pad)
Definition: MutableBufferClass.cpp:1615
RexxBufferBase::openGap
void openGap(size_t offset, size_t _size, size_t tailSize)
Definition: BufferClass.hpp:60
RexxMutableBuffer::makeArray
RexxArray * makeArray()
Definition: MutableBufferClass.cpp:611
RexxMutableBuffer::mydelete
RexxMutableBuffer * mydelete(RexxObject *, RexxObject *)
Definition: MutableBufferClass.cpp:534
RexxMutableBuffer::caselessLastPos
RexxInteger * caselessLastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
Definition: MutableBufferClass.cpp:709
RexxMutableBuffer::subWord
RexxString * subWord(RexxInteger *, RexxInteger *)
Definition: MutableBufferClass.cpp:1438
RexxMutableBuffer::caselessMatchChar
RexxInteger * caselessMatchChar(RexxInteger *position_, RexxString *matchSet)
Definition: MutableBufferClass.cpp:1387
RexxClass
Definition: ClassClass.hpp:49
RexxMutableBuffer::getData
char * getData()
Definition: MutableBufferClass.hpp:125
StringClass.hpp
RexxMutableBuffer::liveGeneral
void liveGeneral(int reason)
Definition: MutableBufferClass.cpp:195
RexxMutableBuffer::ensureCapacity
void ensureCapacity(size_t addedLength)
Definition: MutableBufferClass.cpp:236
RexxMutableBuffer::getLength
size_t getLength()
Definition: MutableBufferClass.hpp:124
RexxMutableBuffer::words
RexxInteger * words()
Definition: MutableBufferClass.cpp:1510
RexxBufferBase::adjustGap
void adjustGap(size_t offset, size_t _size, size_t _newSize, size_t _dataLength)
Definition: BufferClass.hpp:69
RexxBufferBase::setData
void setData(size_t offset, char character, size_t l)
Definition: BufferClass.hpp:73
RexxMutableBuffer::setBufferSize
RexxObject * setBufferSize(RexxInteger *)
Definition: MutableBufferClass.cpp:562
RexxMutableBuffer::caselessPos
RexxInteger * caselessPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
Definition: MutableBufferClass.cpp:686
RexxMutableBuffer::makeString
RexxString * makeString()
Definition: MutableBufferClass.cpp:598
RexxMutableBufferClass::newRexx
RexxMutableBuffer * newRexx(RexxObject **, size_t)
Definition: MutableBufferClass.cpp:71
RexxMutableBuffer::getBufferSize
RexxInteger * getBufferSize()
Definition: MutableBufferClass.hpp:92
RexxMutableBuffer::countStrRexx
RexxInteger * countStrRexx(RexxString *needle)
Definition: MutableBufferClass.cpp:750
RexxMutableBuffer::translate
RexxMutableBuffer * translate(RexxString *tableo, RexxString *tablei, RexxString *pad, RexxInteger *, RexxInteger *)
Definition: MutableBufferClass.cpp:1139
RexxBuffer::getData
virtual char * getData()
Definition: BufferClass.hpp:105
RexxMutableBufferClass::RexxMutableBufferClass
RexxMutableBufferClass(RESTORETYPE restoreType)
Definition: MutableBufferClass.hpp:56
RexxMutableBuffer::wordIndex
RexxInteger * wordIndex(RexxInteger *)
Definition: MutableBufferClass.cpp:1485
RexxMutableBuffer::subWords
RexxArray * subWords(RexxInteger *, RexxInteger *)
Definition: MutableBufferClass.cpp:1458
RexxMutableBuffer::word
RexxString * word(RexxInteger *)
Definition: MutableBufferClass.cpp:1471
RexxMutableBuffer::lastPos
RexxInteger * lastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
Definition: MutableBufferClass.cpp:671
RexxMutableBuffer::live
void live(size_t)
Definition: MutableBufferClass.cpp:186
stringsize_t
size_t stringsize_t
Definition: rexx.h:228
RexxMutableBuffer::openGap
void openGap(size_t offset, size_t _size, size_t tailSize)
Definition: MutableBufferClass.hpp:127
RexxMutableBuffer::getCapacity
size_t getCapacity()
Definition: MutableBufferClass.hpp:133
RexxObject::start
RexxMessage * start(RexxObject **, size_t)
Definition: ObjectClass.cpp:1761
RexxMutableBuffer::caselessMatch
RexxInteger * caselessMatch(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
Definition: MutableBufferClass.cpp:1259
RexxMutableBuffer::adjustGap
void adjustGap(size_t offset, size_t _size, size_t _newSize)
Definition: MutableBufferClass.hpp:129
RexxMutableBuffer::defaultSize
size_t defaultSize
Definition: MutableBufferClass.hpp:142
RexxMutableBuffer::copy
RexxObject * copy()
Definition: MutableBufferClass.cpp:218
RexxBufferBase::copyData
void copyData(size_t offset, const char *string, size_t l)
Definition: BufferClass.hpp:57
RexxMutableBuffer::getStringData
const char * getStringData()
Definition: MutableBufferClass.hpp:123
RexxMutableBuffer::primitiveMakeString
RexxString * primitiveMakeString()
Definition: MutableBufferClass.cpp:624
RESTORETYPE
RESTORETYPE
Definition: ObjectClass.hpp:80
RexxMutableBuffer::RexxMutableBuffer
RexxMutableBuffer(RESTORETYPE restoreType)
Definition: MutableBufferClass.hpp:69
RexxInteger
Definition: IntegerClass.hpp:56
BufferClass.hpp
RexxObject
Definition: ObjectClass.hpp:311
RexxMutableBuffer::verify
RexxInteger * verify(RexxString *, RexxString *, RexxInteger *, RexxInteger *)
Definition: MutableBufferClass.cpp:1424
RexxMutableBuffer::wordLength
RexxInteger * wordLength(RexxInteger *)
Definition: MutableBufferClass.cpp:1500
RexxString
Definition: StringClass.hpp:119