|
- //-----------------------------------------------------------------------------
- // Project : SDK Core
- //
- // Category : Helpers
- // Filename : pluginterfaces/base/ustring.h
- // Created by : Steinberg, 12/2005
- // Description : UTF-16 String class
- //
- //-----------------------------------------------------------------------------
- // This file is part of a Steinberg SDK. It is subject to the license terms
- // in the LICENSE file found in the top-level directory of this distribution
- // and at www.steinberg.net/sdklicenses.
- // No part of the SDK, including this file, may be copied, modified, propagated,
- // or distributed except according to the terms contained in the LICENSE file.
- //-----------------------------------------------------------------------------
-
- #pragma once
-
- #include "ftypes.h"
-
- //------------------------------------------------------------------------
- namespace Steinberg {
-
- //------------------------------------------------------------------------
- /** UTF-16 string class without buffer management. */
- //------------------------------------------------------------------------
- class UString
- {
- public:
- //------------------------------------------------------------------------
- UString (char16* buffer, int32 size)
- : thisBuffer (buffer),
- thisSize (size)
- {}
-
- int32 getSize () const { return thisSize; } ///< returns buffer size
- operator const char16* () const { return thisBuffer; } ///< cast to char16*
-
- /** Returns length of string (in code units). */
- int32 getLength () const;
-
- /** Copy from UTF-16 buffer. */
- UString& assign (const char16* src, int32 srcSize = -1);
-
- /** Append UTF-16 buffer. */
- UString& append (const char16* src, int32 srcSize = -1);
-
- /** Copy to UTF-16 buffer. */
- const UString& copyTo (char16* dst, int32 dstSize) const;
-
- /** Copy from ASCII string. */
- UString& fromAscii (const char* src, int32 srcSize = -1);
- UString& assign (const char* src, int32 srcSize = -1) { return fromAscii (src, srcSize); }
-
- /** Copy to ASCII string. */
- const UString& toAscii (char* dst, int32 dstSize) const;
-
- /** Scan integer from string. */
- bool scanInt (int64& value) const;
-
- /** Print integer to string. */
- bool printInt (int64 value);
-
- /** Scan float from string. */
- bool scanFloat (double& value) const;
-
- /** Print float to string. */
- bool printFloat (double value, int32 precision = 4);
- //------------------------------------------------------------------------
- protected:
- char16* thisBuffer;
- int32 thisSize;
- };
-
- //------------------------------------------------------------------------
- /** UTF-16 string with fixed buffer size. */
- //------------------------------------------------------------------------
- template<int32 maxSize>
- class UStringBuffer: public UString
- {
- public:
- //------------------------------------------------------------------------
- UStringBuffer ()
- : UString (data, maxSize)
- { data[0] = 0; }
-
- /** Construct from UTF-16 string. */
- UStringBuffer (const char16* src, int32 srcSize = -1)
- : UString (data, maxSize)
- { data[0] = 0; if (src) assign (src, srcSize); }
-
- /** Construct from ASCII string. */
- UStringBuffer (const char* src, int32 srcSize = -1)
- : UString (data, maxSize)
- { data[0] = 0; if (src) fromAscii (src, srcSize); }
- //------------------------------------------------------------------------
- protected:
- char16 data[maxSize];
- };
-
- //------------------------------------------------------------------------
- typedef UStringBuffer<128> UString128; ///< 128 character UTF-16 string
- typedef UStringBuffer<256> UString256; ///< 256 character UTF-16 string
- } // namespace Steinberg
-
- //------------------------------------------------------------------------
- #define USTRING(asciiString) Steinberg::UString256 (asciiString)
- #define USTRINGSIZE(var) (sizeof (var) / sizeof (Steinberg::char16))
-
- //------------------------------------------------------------------------
|