00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __STRING_H
00025 #define __STRING_H
00026
00027 #include <stlib/SequenceableCollection.h>
00028 #include <stdarg.h>
00029
00030 namespace Core {
00031
00032 class Array;
00033 class ByteArray;
00034 class Character;
00035 class Number;
00036 class StringImpl;
00037 class Stream;
00038 class Visitor;
00039
00047 class String : public SequenceableCollection
00048 {
00049 protected:
00050 StringImpl *implementor;
00051
00052 public:
00056 String(long size = 0);
00057
00061 String(const char *str);
00062
00063 String(const ByteArray *byteArray);
00064
00065 virtual ~String(void);
00066
00073 static String* format(const String* format, ...);
00074
00079 static String* format(const char* format, ...);
00080
00081
00082 String(const String &origin);
00083
00084
00085 virtual String *className(void) const;
00086
00087
00088 static String *with(Character *object);
00089 static String *with(Character *obj1, Character *obj2);
00090 static String *with(Character *obj1, Character *obj2, Character *obj3);
00091 static String *with(Character *obj1, Character *obj2, Character *obj3, Character *obj4);
00092
00093 static String *withAll(Collection *coll);
00094
00095
00096 virtual Object *at(int index) const;
00097 virtual void put(int index, Object *obj);
00098 virtual void put(int index, char obj);
00099 virtual long size(void) const;
00100 virtual long indexOf(Object *obj) const
00101 { return SequenceableCollection::indexOf(obj); }
00102 virtual long indexOf(const char obj) const;
00103 virtual long lastIndexOf(Object *obj) const
00104 { return SequenceableCollection::lastIndexOf(obj); }
00105 virtual long lastIndexOf(const char obj) const;
00106 virtual long nextIndexOf(Object *element, long startIndex, long stopIndex) const
00107 { return SequenceableCollection::nextIndexOf(element, startIndex, stopIndex); }
00108 virtual long nextIndexOf(const char element, long startIndex, long stopIndex) const;
00109 virtual long prevIndexOf(Object *element, long startIndex, long stopIndex) const
00110 { return SequenceableCollection::prevIndexOf(element, startIndex, stopIndex); }
00111 virtual long prevIndexOf(const char element, long startIndex, long stopIndex) const;
00112
00113
00114 virtual void add(Object *obj);
00115 virtual void changeSize(long newSize);
00116
00117
00118 virtual long hash(void) const;
00119 virtual bool isEqual(const Object *object) const;
00120 virtual bool isEqual(const Object &object) const
00121 { return SequenceableCollection::isEqual(object); }
00122 virtual bool isEqual(const char *string) const;
00123
00138 virtual bool match(String *string);
00139 virtual bool match(const char *string);
00140 virtual bool match(String *string, bool ignoreCase);
00141 virtual bool match(const char *string, bool ignoreCase);
00142 virtual bool matchesPattern(String *string, bool ignoreCase);
00143
00144
00148 virtual char *asCString(void) const;
00149 virtual operator char*(void) const;
00150
00152 virtual Array *asArrayOfSubstrings(void);
00153
00157 virtual Array *asArrayOfSubstringsSeparatedBy(Character *ch);
00158 virtual Array *asArrayOfSubstringsSeparatedBy(const char ch);
00159 virtual ByteArray *asByteArray(void) const;
00160 virtual ByteArray *asByteArrayEncoding(String *encoding) const;
00161 virtual ByteArray *asByteArrayEncoding(const char *encoding) const;
00162 virtual String *asLowercase(void);
00163 virtual Number *asNumber(void);
00164 virtual Number *asNumberRadix(int radix);
00165 virtual String *asUppercase(void);
00166 virtual String *asUppercaseFirst(void);
00167 virtual String *asString(void);
00168
00169
00170 virtual Object *copy(void);
00171 virtual Object *copy(long from, long to)
00172 { return SequenceableCollection::copy(from, to); }
00173
00174 virtual Object *copyEmpty(long size);
00175 virtual SequenceableCollection &operator+(SequenceableCollection &collection);
00176 virtual String &operator+(const char *string);
00177 virtual String *concatenateWith(String *string);
00178 virtual String *concatenateWith(const char *string);
00179
00180
00181 virtual void printOn(Stream *stream) const;
00182
00183
00184 virtual bool includes(Object *object)
00185 { return SequenceableCollection::includes(object); }
00186 virtual bool includes(const char element);
00187 virtual bool includesSubcollection(SequenceableCollection *coll) const
00188 { return SequenceableCollection::includesSubcollection(coll); }
00189 virtual bool includesSubcollection(const char *coll) const
00190 { return SequenceableCollection::includesSubcollection(new String(coll)); }
00191 virtual bool isString(void) const;
00192 virtual bool isByteString(void) const;
00193 virtual bool isTwoByteString(void) const;
00194 virtual bool isCharacterArray(void) const;
00195
00197 virtual bool isDigitString(void);
00198
00199 virtual bool startsWith(SequenceableCollection *coll) const
00200 { return SequenceableCollection::startsWith(coll); }
00201 virtual bool startsWith(const char *str) const;
00202 virtual bool endsWith(SequenceableCollection *coll) const
00203 { return SequenceableCollection::endsWith(coll); }
00204 virtual bool endsWith(const char *str) const;
00205
00206
00207 virtual String *trimBlanks(void);
00208 virtual String *demangleMethodName(void);
00209
00210
00211 virtual void visitBy(Visitor *visitor);
00212
00213 protected:
00214
00215 static String *formatArgumentsIntoString(const char *format, va_list args);
00216 virtual void changeWideToFit(int width);
00217 };
00218
00219 };
00220
00221 #endif