version 1.26, 2001/05/07 13:51:05
|
version 1.39.2.3, 2001/08/18 00:01:55
|
|
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM |
// Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// copy of this software and associated documentation files (the "Software"), |
// of this software and associated documentation files (the "Software"), to |
// to deal in the Software without restriction, including without limitation |
// deal in the Software without restriction, including without limitation the |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// and/or sell copies of the Software, and to permit persons to whom the |
// sell copies of the Software, and to permit persons to whom the Software is |
// Software is furnished to do so, subject to the following conditions: |
// furnished to do so, subject to the following conditions: |
// | // |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
// DEALINGS IN THE SOFTWARE. |
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// | // |
//============================================================================== | //============================================================================== |
// | // |
|
|
#define Pegasus_String_h | #define Pegasus_String_h |
| |
#include <iostream> | #include <iostream> |
|
#include <fstream> |
#include <cstring> | #include <cstring> |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/Char16.h> | #include <Pegasus/Common/Char16.h> |
|
|
String(const char* x, Uint32 n); | String(const char* x, Uint32 n); |
| |
/// String destructor. Used by the representation of the String object | /// String destructor. Used by the representation of the String object |
~String() |
~String(); |
{ |
|
} |
|
| |
/** Assign this string with x. | /** Assign this string with x. |
<pre> | <pre> |
|
|
String t2 = t1; | String t2 = t1; |
</pre> | </pre> |
*/ | */ |
String& operator=(const String& x) { _rep = x._rep; return *this; } |
String& operator=(const String& x) { return assign(x); } |
| |
/// Assign this string with Char16 x. | /// Assign this string with Char16 x. |
String& operator=(const Char16* x) { assign(x); return *this; } | String& operator=(const Char16* x) { assign(x); return *this; } |
|
|
@param x String to assign | @param x String to assign |
@return Returns the String | @return Returns the String |
*/ | */ |
String& assign(const String& x) { _rep = x._rep; return *this; } |
String& assign(const String& x); |
| |
/// Assign this string with x. | /// Assign this string with x. |
String& assign(const Char16* x); | String& assign(const Char16* x); |
|
|
test.clear(); // String test is now NULL (length == 0) | test.clear(); // String test is now NULL (length == 0) |
</pre> | </pre> |
*/ | */ |
void clear() { _rep.clear(); _rep.append('\0'); } |
void clear(); |
|
|
| |
/** reserve - Reserves memory for capacity characters. Notice that this does | /** reserve - Reserves memory for capacity characters. Notice that this does |
not | not |
|
|
capacity argument. | capacity argument. |
@param capacity defines the capacity in characters to reserve. | @param capacity defines the capacity in characters to reserve. |
*/ | */ |
void reserve(Uint32 capacity) { _rep.reserve(capacity + 1); } |
void reserve(Uint32 capacity); |
| |
/** Returns the length of the String object. | /** Returns the length of the String object. |
@return Length of the string in characters. | @return Length of the string in characters. |
|
|
*/ | */ |
Uint32 size() const { return _rep.size() - 1; } | Uint32 size() const { return _rep.size() - 1; } |
| |
/** Returns a pointer to the first character in the null-terminated string |
/** getData Returns a pointer to the first character in the |
string. |
null-terminated string string of the String object. |
@return Pointer to the first character of the String object | @return Pointer to the first character of the String object |
<pre> | <pre> |
String t1 = "abc"; | String t1 = "abc"; |
|
|
*/ | */ |
const Char16* getData() const { return _rep.getData(); } | const Char16* getData() const { return _rep.getData(); } |
| |
/** AallocateCString - llocates an 8 bit representation of this string. The |
/** AallocateCString - llocates an 8 bit representation of this String |
user is |
object. The user is responsible for freeing the result. If any |
responsible for freeing the result. If any characters are truncated, |
characters are truncated, a TruncatedCharacter exception is thrown. |
a TruncatedCharacter exception is thrown. This exception may |
This exception may be suppressed by passing true as the noThrow |
be suppressed by passing true as the noThrow argument. Extra |
argument. Extra characters may be allocated at the end of the |
characters may be allocated at the end of the new string by |
new string by passing a non-zero value to the extraBytes argument. |
passing a non-zero value to the extraBytes argument. |
|
@param extraBytes Defines the number of extra characters to be | @param extraBytes Defines the number of extra characters to be |
allocated at the end of the new string. Default is zero. | allocated at the end of the new string. Default is zero. |
|
|
@param noThrow If true, no exception will be thrown if characters | @param noThrow If true, no exception will be thrown if characters |
are truncated | are truncated |
|
|
@return pointer to the new representation of the string | @return pointer to the new representation of the string |
|
|
@exception Throws TruncatedCharacter exception if any characters are | @exception Throws TruncatedCharacter exception if any characters are |
truncated | truncated |
<pre> | <pre> |
String test = "abc"; | String test = "abc"; |
char* p = test.allocateCString(); | char* p = test.allocateCString(); |
|
... |
|
delete [] p; |
</pre> | </pre> |
*/ | */ |
char* allocateCString(Uint32 extraBytes = 0, Boolean noThrow = false) const; | char* allocateCString(Uint32 extraBytes = 0, Boolean noThrow = false) const; |
| |
/** appendToCString - Append the given string to a C-string. If the length |
/** appendToCString - Append the given String object to a C-string. If the |
is not Uint32(-1), |
length is not PEG_NOT_FOUND, then the lesser of the the length argument |
then the lesser of the the length argument and the length of this |
and he length of this string is truncated. Otherwise, the entire string |
string is truncated. Otherwise, the entire string is trunctated. The |
is trunctated. The TruncatedCharacter exception is thrown if any |
TruncatedCharacter exception is thrown if any characters are truncated. |
characters are truncated. |
|
@param str Char pointer to the string to append |
|
@param length Length to append or PEG_NOT_FOUND (Uint32(-1) |
|
@param noThrow - If false, throw the "TruncatedCharacter" exception of |
|
any characters are truncated |
|
@return void |
|
@exception Throws TruncatedCharacter exception of characters are |
|
truncated and noThrow parameter is false. |
<pre> | <pre> |
const char STR0[] = "one two three four"; | const char STR0[] = "one two three four"; |
String s = STR0; | String s = STR0; |
|
|
*/ | */ |
void appendToCString( | void appendToCString( |
char* str, | char* str, |
Uint32 length = Uint32(-1), |
Uint32 length = PEG_NOT_FOUND, |
Boolean noThrow = false) const; | Boolean noThrow = false) const; |
| |
/** Returns the Ith character of the String object. | /** Returns the Ith character of the String object. |
|
|
s4.append(Char16(0x0000)) | s4.append(Char16(0x0000)) |
</pre> | </pre> |
*/ | */ |
String& append(const Char16& c) |
String& append(const Char16& c); |
{ |
|
_rep.insert(_rep.size() - 1, c); |
|
return *this; |
|
} |
|
| |
/// Append n characters from str to this String object. | /// Append n characters from str to this String object. |
String& append(const Char16* str, Uint32 n); | String& append(const Char16* str, Uint32 n); |
|
|
} | } |
| |
/** Remove size characters from the string starting at the given | /** Remove size characters from the string starting at the given |
position. If size is -1, then all characters after pos are removed. |
position. If size is PEG_NOT_FOUND, then all characters after pos are |
|
removed. |
@param pos Position in string to start remove | @param pos Position in string to start remove |
@param size Number of characters to remove. Default is -1 which |
@param size Number of characters to remove. Default is PEG_NOT_FOUND |
causes all characters after pos to be removed |
(Uint32(-1) which causes all characters after pos to be removed |
<pre> | <pre> |
String s; | String s; |
s = "abc"; | s = "abc"; |
|
|
@exception throws "OutOfBounds" exception if size is greater than | @exception throws "OutOfBounds" exception if size is greater than |
length of String plus starting position for remove. | length of String plus starting position for remove. |
*/ | */ |
void remove(Uint32 pos, Uint32 size = Uint32(-1)); |
void remove(Uint32 pos, Uint32 size = PEG_NOT_FOUND); |
| |
/** Return a new String which is initialzed with <TT>length</TT> | /** Return a new String which is initialzed with <TT>length</TT> |
characters from this string starting at <TT>pos</TT>. | characters from this string starting at <TT>pos</TT>. |
@param <TT>pos</TT> is the positon in string to start getting the | @param <TT>pos</TT> is the positon in string to start getting the |
substring. | substring. |
@param <TT>length</TT> is the number of characters to get. If length | @param <TT>length</TT> is the number of characters to get. If length |
is -1, then all characters after pos are added to the new string. |
is PEG_NOT_FOUND, then all characters after pos are added to the new |
|
string. |
@return String with the defined substring. | @return String with the defined substring. |
<pre> | <pre> |
s = "abcdefg"; | s = "abcdefg"; |
|
|
assert(String::equal(s, "abc")); | assert(String::equal(s, "abc")); |
</pre> | </pre> |
*/ | */ |
String subString(Uint32 pos, Uint32 length = Uint32(-1)) const; |
String subString(Uint32 pos, Uint32 length = PEG_NOT_FOUND) const; |
| |
/** Find the position of the first occurence of the character c. | /** Find the position of the first occurence of the character c. |
If the character is not found, -1 is returned. |
If the character is not found, PEG_NOT_FOUND is returned. |
@param c Char to be found in the String | @param c Char to be found in the String |
@return Position of the character in the string or -1 if not found. |
@return Position of the character in the string or PEG_NOT_FOUND if not |
|
found. |
*/ | */ |
Uint32 find(Char16 c) const; | Uint32 find(Char16 c) const; |
| |
|
/** Same as above but starts searching from the given position. */ |
|
Uint32 find(Uint32 pos, Char16 c) const; |
|
|
/** Find the position of the first occurence of the string object. | /** Find the position of the first occurence of the string object. |
This function finds one string inside another | This function finds one string inside another |
If the matching substring is not found, -1 is returned. |
If the matching substring is not found, PEG_NOT_FOUND is returned. |
@param s String object to be found in the String | @param s String object to be found in the String |
@return Position of the substring in the String or -1 if not |
@return Position of the substring in the String or PEG_NOT_FOUND if not |
found. | found. |
*/ | */ |
Uint32 find(const String& s) const; | Uint32 find(const String& s) const; |
|
|
/** Find substring | /** Find substring |
@ param 16 bit character pointer | @ param 16 bit character pointer |
@seealso find | @seealso find |
@return Position of the substring in the String or -1 if not |
@return Position of the substring in the String or PEG_NOT_FOUND if not |
found. | found. |
*/ | */ |
Uint32 find(const Char16* s) const; | Uint32 find(const Char16* s) const; |
| |
/** find substring | /** find substring |
@param s char* to substring | @param s char* to substring |
@return Position of the substring in the String or -1 if not |
@return Position of the substring in the String or PEG_NOT_FOUND if not |
found. | found. |
*/ | */ |
Uint32 find(const char* s) const; | Uint32 find(const char* s) const; |
|
|
character first). | character first). |
@param c Char16 character to find in String. | @param c Char16 character to find in String. |
@Seealso find | @Seealso find |
@return Position of the character in the string or -1 if not found. |
@return Position of the character in the string or PEG_NOT_FOUND if not |
|
found. |
| |
NOTE: This function is defined only for char* input, not for | NOTE: This function is defined only for char* input, not for |
String. | String. |
|
|
*/ | */ |
void translate(Char16 fromChar, Char16 toChar); | void translate(Char16 fromChar, Char16 toChar); |
| |
/** Compare the first n characters of the two strings. |
/** Method for printing a string. |
@param s1 First null-terminated string for the comparison |
*/ |
@param s2 Second null-terminated string for the comparison |
void print() const; |
@param n Number of characters to compare |
|
@return Return -1 if s1 is lexographically less than s2. If they |
/** Compare the first n characters of the two strings.. |
are equavalent return 0. Otherwise return 1. |
@param s1 First null-terminated string for the comparison. |
|
@param s2 Second null-terminated string for the comparison. |
|
@param n Number of characters to compare. |
|
@return Return -1 if s1 is lexographically less than s2. If they are |
|
equavalent return 0. Otherwise return 1. |
*/ | */ |
static int compare(const Char16* s1, const Char16* s2, Uint32 n); | static int compare(const Char16* s1, const Char16* s2, Uint32 n); |
| |
|
/** Just like one above except ignores case differences. |
|
*/ |
|
static int compareNoCase(const char* s1, const char* s2, Uint32 n); |
|
|
|
static int compareNoCase(const char* s1, const char* s2); |
|
|
/** Compare two null-terminated strings. | /** Compare two null-terminated strings. |
@param s1 First null-terminated string for the comparison |
@param s1 First null-terminated string for the comparison. |
@param s2 Second null-terminated string for the comparison |
@param s2 Second null-terminated string for the comparison. |
@return If s1 is less than s2, return -1; if equal return 0; | @return If s1 is less than s2, return -1; if equal return 0; |
otherwise, return 1. | otherwise, return 1. |
| |
|
|
/// Return true if the two strings are equal. | /// Return true if the two strings are equal. |
static Boolean equal(const char* x, const String& y); | static Boolean equal(const char* x, const String& y); |
| |
static Boolean equalIgnoreCase(const String& x, const String& y); |
static Boolean equalNoCase(const String& x, const String& y); |
| |
/// Convert the plain old C-string to lower case: | /// Convert the plain old C-string to lower case: |
static void toLower(char* str); | static void toLower(char* str); |
|
|
return !String::equal(x, y); | return !String::equal(x, y); |
} | } |
| |
PEGASUS_COMMON_LINKAGE std::ostream& operator<<( |
PEGASUS_COMMON_LINKAGE PEGASUS_STD(ostream)& operator<<( |
std::ostream& os, |
PEGASUS_STD(ostream)& os, |
const String& x); | const String& x); |
| |
/** overload operator + - Concatenates String objects. | /** overload operator + - Concatenates String objects. |
|
|
| |
/** Compare two strings but ignore any case differences. | /** Compare two strings but ignore any case differences. |
*/ | */ |
PEGASUS_COMMON_LINKAGE int CompareIgnoreCase(const char* s1, const char* s2); |
PEGASUS_COMMON_LINKAGE int CompareNoCase(const char* s1, const char* s2); |
| |
/** Get the next line from the input file. | /** Get the next line from the input file. |
*/ | */ |
PEGASUS_COMMON_LINKAGE Boolean GetLine(std::istream& is, String& line); |
PEGASUS_COMMON_LINKAGE Boolean GetLine(PEGASUS_STD(istream)& is, String& line); |
| |
/* This is an internal class not to be used by the internal Pegasus |
/* This is an internal class to be used by the internal Pegasus |
components only. It provides an easy way to create an 8-bit string | components only. It provides an easy way to create an 8-bit string |
representation on the fly without calling allocateCString() and | representation on the fly without calling allocateCString() and |
then worrying about deleting the string. The underscore before the | then worrying about deleting the string. The underscore before the |
|
|
return tmp; | return tmp; |
} | } |
| |
|
PEGASUS_COMMON_LINKAGE const Array<String>& EmptyStringArray(); |
|
|
|
PEGASUS_COMMON_LINKAGE Boolean Equal(const String& x, const String& y); |
|
|
|
inline Boolean Open(PEGASUS_STD(ifstream)& is, const String& path) |
|
{ |
|
char* tmpPath = path.allocateCString(); |
|
is.open(tmpPath); |
|
delete [] tmpPath; |
|
return !!is; |
|
} |
|
|
|
inline Boolean Open(PEGASUS_STD(ofstream)& os, const String& path) |
|
{ |
|
char* tmpPath = path.allocateCString(); |
|
os.open(tmpPath); |
|
delete [] tmpPath; |
|
return !!os; |
|
} |
|
|
|
inline Boolean OpenAppend(PEGASUS_STD(ofstream)& os, const String& path) |
|
{ |
|
char* tmpPath = path.allocateCString(); |
|
os.open(tmpPath, PEGASUS_STD(ios::app)); |
|
delete [] tmpPath; |
|
return !!os; |
|
} |
|
|
|
#define PEGASUS_ARRAY_T String |
|
#include <Pegasus/Common/ArrayInter.h> |
|
#undef PEGASUS_ARRAY_T |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |
#endif /* Pegasus_String_h */ | #endif /* Pegasus_String_h */ |
|
|