1 //-----------------------------------------------------------------------------
5 // Filename : pluginterfaces/base/ustring.h
6 // Created by : Steinberg, 12/2005
7 // Description : UTF-16 String class
9 //-----------------------------------------------------------------------------
10 // This file is part of a Steinberg SDK. It is subject to the license terms
11 // in the LICENSE file found in the top-level directory of this distribution
12 // and at www.steinberg.net/sdklicenses.
13 // No part of the SDK, including this file, may be copied, modified, propagated,
14 // or distributed except according to the terms contained in the LICENSE file.
15 //-----------------------------------------------------------------------------
21 //------------------------------------------------------------------------
24 //------------------------------------------------------------------------
25 /** UTF-16 string class without buffer management.
26 Note: that some characters are encoded in 2 UTF16 code units (surrogate pair),
27 this means that getLength returns the number of code unit, not the count of character! */
31 //------------------------------------------------------------------------
32 /** Construct from UTF-16 string, size is in code unit (count of char16) */
33 UString (char16
* buffer
, int32 size
) : thisBuffer (buffer
), thisSize (size
) {}
35 /** returns buffer size */
36 int32
getSize () const { return thisSize
; }
38 /** cast to char16* */
39 operator const char16
* () const { return thisBuffer
; }
41 /** Returns length of string (in code unit). Note this is not the count of character! */
42 int32
getLength () const;
44 /** Copy from UTF-16 buffer (srcSize is in code unit (count of char16)). */
45 UString
& assign (const char16
* src
, int32 srcSize
= -1);
47 /** Append UTF-16 buffer (srcSize is in code unit (count of char16)). */
48 UString
& append (const char16
* src
, int32 srcSize
= -1);
50 /** Copy to UTF-16 buffer (dstSize is in code unit (count of char16)). */
51 const UString
& copyTo (char16
* dst
, int32 dstSize
) const;
53 /** Copy from ASCII string (srcSize is in code unit (count of char16)). */
54 UString
& fromAscii (const char* src
, int32 srcSize
= -1);
55 UString
& assign (const char* src
, int32 srcSize
= -1) { return fromAscii (src
, srcSize
); }
57 /** Copy to ASCII string. */
58 const UString
& toAscii (char* dst
, int32 dstSize
) const;
60 /** Scan integer from string. */
61 bool scanInt (int64
& value
) const;
63 /** Print integer to string. */
64 bool printInt (int64 value
);
66 /** Scan float from string. */
67 bool scanFloat (double& value
) const;
69 /** Print float to string. */
70 bool printFloat (double value
, int32 precision
= 4);
71 //------------------------------------------------------------------------
74 int32 thisSize
; ///< size in code unit (not in byte!)
77 //------------------------------------------------------------------------
78 /** UTF-16 string with fixed buffer size.
80 template <int32 maxSize
>
81 class UStringBuffer
: public UString
84 //------------------------------------------------------------------------
85 UStringBuffer () : UString (data
, maxSize
) { data
[0] = 0; }
87 /** Construct from UTF-16 string. */
88 UStringBuffer (const char16
* src
, int32 srcSize
= -1) : UString (data
, maxSize
)
92 assign (src
, srcSize
);
95 /** Construct from ASCII string. */
96 UStringBuffer (const char* src
, int32 srcSize
= -1) : UString (data
, maxSize
)
100 fromAscii (src
, srcSize
);
102 //------------------------------------------------------------------------
104 char16 data
[maxSize
];
107 //------------------------------------------------------------------------
108 typedef UStringBuffer
<128> UString128
; ///< 128 character UTF-16 string
109 typedef UStringBuffer
<256> UString256
; ///< 256 character UTF-16 string
110 } // namespace Steinberg
112 //------------------------------------------------------------------------
113 #define USTRING(asciiString) Steinberg::UString256 (asciiString)
114 #define USTRINGSIZE(var) (sizeof (var) / sizeof (Steinberg::char16))
116 //------------------------------------------------------------------------