pstring.h
来自「开源代码的pwlib的1.10.0版本,使用openh323的1.18.0版本毕」· C头文件 代码 · 共 1,755 行 · 第 1/5 页
H
1,755 行
\begin{verbatim}
PString s1 = "String"; // New array allocated and set to "String"
PString s2 = s1; // s2 has pointer to same array as s1
// and reference count is 2 for both
s1[0] = 's'; // Breaks references into different strings
\end{verbatim}
at the end s1 is "string" and s2 is "String" both with reference count of 1.
The functions that will "break" a reference are #SetSize()#,
#SetMinSize()#, #GetPointer()#, #SetAt()# and
#operator[]#.
Note that the array is a '\0' terminated string as in C strings. Thus the
memory allocated, and the length of the string may be different values.
Also note that the PString is inherently an 8 bit string. The character set
is not defined for most operations and it may be any 8 bit character set.
However when conversions are being made to or from 2 byte formats then the
PString is assumed to be the UTF-8 format. The 2 byte format is nominally
UCS-2 (aka BMP string) and while it is not exactly the same as UNICODE
they are compatible enough for them to be treated the same for most real
world usage.
*/
class PString : public PCharArray {
PCLASSINFO(PString, PCharArray);
// using namespace std;
public:
/**@name Construction */
//@{
/**Construct an empty string. This will have one character in it which is
the '\0' character.
*/
PINLINE PString();
/**Create a new reference to the specified string. The string memory is not
copied, only the pointer to the data.
*/
PINLINE PString(
const PString & str ///< String to create new reference to.
);
/**Create a new string from the specified std::string
*/
PINLINE PString(
const std::string & str
);
/**Create a string from the C string array. This is most commonly used with
a literal string, eg "hello". A new memory block is allocated of a size
sufficient to take the length of the string and its terminating
'\0' character.
If UCS-2 is used then each char from the char pointer is mapped to a
single UCS-2 character.
*/
PString(
const char * cstr ///< Standard '\0' terminated C string.
);
/**Create a string from the UCS-2 string array.
A new memory block is allocated of a size sufficient to take the length
of the string and its terminating '\0' character.
*/
PString(
const WORD * ustr ///< UCS-2 null terminated string.
);
/**Create a string from the array. A new memory block is allocated of
a size equal to #len# plus one which is sufficient to take
the string and a terminating '\0' character.
If UCS-2 is used then each char from the char pointer is mapped to a
single UCS-2 character.
Note that this function will allow a string with embedded '\0'
characters to be created, but most of the functions here will be unable
to access characters beyond the first '\0'. Furthermore, if the
#MakeMinimumSize()# function is called, all data beyond that first
#'\0'# character will be lost.
*/
PString(
const char * cstr, ///< Pointer to a string of characters.
PINDEX len ///< Length of the string in bytes.
);
/**Create a string from the UCS-2 array. A new memory block is allocated
of a size equal to #len# plus one which is sufficient to take
the string and a terminating '\0' character.
Note that this function will allow a string with embedded '\0'
characters to be created, but most of the functions here will be unable
to access characters beyond the first '\0'. Furthermore, if the
#MakeMinimumSize()# function is called, all data beyond that first
#'\0'# character will be lost.
*/
PString(
const WORD * ustr, ///< Pointer to a string of UCS-2 characters.
PINDEX len ///< Length of the string in bytes.
);
/**Create a string from the UCS-2 array. A new memory block is allocated
of a size equal to #len# plus one which is sufficient to take
the string and a terminating '\0' character.
Note that this function will allow a string with embedded '\0'
characters to be created, but most of the functions here will be unable
to access characters beyond the first '\0'. Furthermore, if the
#MakeMinimumSize()# function is called, all data beyond that first
#'\0'# character will be lost.
*/
PString(
const PWORDArray & ustr ///< UCS-2 null terminated string.
);
/**Create a string from the single character. This is most commonly used
as a type conversion constructor when a literal character, eg 'A' is
used in a string expression. A new memory block is allocated of two
characters to take the char and its terminating '\0' character.
If UCS-2 is used then the char is mapped to a single UCS-2
character.
*/
PString(
char ch ///< Single character to initialise string.
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
short n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
unsigned short n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
int n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
unsigned int n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
long n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
unsigned long n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
PInt64 n ///< Integer to convert
);
/**Create a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString(
PUInt64 n ///< Integer to convert
);
enum ConversionType {
Pascal, // Data is a length byte followed by characters.
Basic, // Data is two length bytes followed by characters.
Literal, // Data is C language style string with \ escape codes.
Signed, // Convert a signed integer to a string.
Unsigned, // Convert an unsigned integer to a string.
Decimal, // Convert a real number to a string in decimal format.
Exponent, // Convert a real number to a string in exponent format.
Printf, // Formatted output, sprintf() style function.
NumConversionTypes
};
/* Type of conversion to make in the conversion constructors.
*/
/* Contruct a new string converting from the spcified data source into
a string array.
*/
PString(
ConversionType type, ///< Type of data source for conversion.
const char * str, ///< String to convert.
... ///< Extra parameters for #sprintf()# call.
);
PString(
ConversionType type, ///< Type of data source for conversion.
long value, ///< Integer value to convert.
unsigned base = 10 ///< Number base to use for the integer conversion.
);
PString(
ConversionType type, ///< Type of data source for conversion.
double value, ///< Floating point value to convert.
unsigned places ///< Number of decimals in real number output.
);
/**Assign the string to the current object. The current instance then
becomes another reference to the same string in the #str#
parameter.
@return
reference to the current PString object.
*/
PString & operator=(
const PString & str ///< New string to assign.
);
/**Assign the C string to the current object. The current instance then
becomes a unique reference to a copy of the #cstr# parameter.
The #cstr# parameter is typically a literal string, eg:
\begin{verbatim}
myStr = "fred";
\end{verbatim}
@return
reference to the current PString object.
*/
PString & operator=(
const char * cstr ///< C string to assign.
);
/**Assign the character to the current object. The current instance then
becomes a unique reference to a copy of the character parameter. eg:
\begin{verbatim}
myStr = 'A';
\end{verbatim}
@return
reference to the current PString object.
*/
PString & operator=(
char ch ///< Character to assign.
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
short n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
unsigned short n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
int n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
unsigned int n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
long n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
unsigned long n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
PInt64 n ///< Integer to convert
);
/**Assign a string from the integer type.
This will create a simple base 10, shortest length conversion of the
integer (with sign character if appropriate) into the string.
*/
PString & operator=(
PUInt64 n ///< Integer to convert
);
/**Make the current string empty
*/
virtual PString & MakeEmpty();
/**Return an empty string.
*/
static PString Empty();
//@}
/**@name Overrides from class PObject */
//@{
/**Make a complete duplicate of the string. Note that the data in the
array of characters is duplicated as well and the new object is a
unique reference to that data.
*/
virtual PObject * Clone() const;
/**Get the relative rank of the two strings. The system standard function,
eg strcmp(), is used.
@return
comparison of the two objects, #EqualTo# for same,
#LessThan# for #obj# logically less than the
object and #GreaterThan# for #obj# logically
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?