mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-07-28 03:31:46 +02:00
bin
module
vendor
CPR
ConcurrentQueue
Fmt
JSMN
MaxmindDB
POCO
ApacheConnector
CppParser
CppUnit
Crypto
Data
Encodings
Foundation
cmake
include
Poco
Dynamic
ASCIIEncoding.h
AbstractCache.h
AbstractDelegate.h
AbstractEvent.h
AbstractObserver.h
AbstractPriorityDelegate.h
AbstractStrategy.h
AccessExpirationDecorator.h
AccessExpireCache.h
AccessExpireLRUCache.h
AccessExpireStrategy.h
ActiveDispatcher.h
ActiveMethod.h
ActiveResult.h
ActiveRunnable.h
ActiveStarter.h
Activity.h
Alignment.h
Any.h
ArchiveStrategy.h
Array.h
Ascii.h
AsyncChannel.h
AtomicCounter.h
AtomicFlag.h
AutoPtr.h
AutoReleasePool.h
Base32Decoder.h
Base32Encoder.h
Base64Decoder.h
Base64Encoder.h
BasicEvent.h
BinaryReader.h
BinaryWriter.h
Buffer.h
BufferAllocator.h
BufferedBidirectionalStreamBuf.h
BufferedStreamBuf.h
Bugcheck.h
ByteOrder.h
Channel.h
Checksum.h
ClassLibrary.h
ClassLoader.h
Clock.h
Condition.h
Config.h
Configurable.h
ConsoleChannel.h
CountingStream.h
DataURIStream.h
DataURIStreamFactory.h
DateTime.h
DateTimeFormat.h
DateTimeFormatter.h
DateTimeParser.h
Debugger.h
DefaultStrategy.h
DeflatingStream.h
Delegate.h
DigestEngine.h
DigestStream.h
DirectoryIterator.h
DirectoryIteratorStrategy.h
DirectoryIterator_UNIX.h
DirectoryIterator_WIN32U.h
DirectoryWatcher.h
DynamicAny.h
DynamicAnyHolder.h
DynamicFactory.h
DynamicStruct.h
Environment.h
Environment_UNIX.h
Environment_VX.h
Environment_WIN32U.h
Environment_WINCE.h
Error.h
ErrorHandler.h
Event.h
EventArgs.h
EventChannel.h
EventLogChannel.h
Event_POSIX.h
Event_VX.h
Event_WIN32.h
Exception.h
ExpirationDecorator.h
Expire.h
ExpireCache.h
ExpireLRUCache.h
ExpireStrategy.h
FIFOBuffer.h
FIFOBufferStream.h
FIFOEvent.h
FIFOStrategy.h
FPEnvironment.h
FPEnvironment_C99.h
FPEnvironment_DEC.h
FPEnvironment_DUMMY.h
FPEnvironment_QNX.h
FPEnvironment_SUN.h
FPEnvironment_WIN32.h
File.h
FileChannel.h
FileStream.h
FileStreamFactory.h
FileStream_POSIX.h
FileStream_WIN32.h
File_UNIX.h
File_VX.h
File_WIN32U.h
File_WINCE.h
Format.h
Formatter.h
FormattingChannel.h
Foundation.h
FunctionDelegate.h
FunctionPriorityDelegate.h
Glob.h
HMACEngine.h
Hash.h
HashFunction.h
HashMap.h
HashSet.h
HashStatistic.h
HashTable.h
HexBinaryDecoder.h
HexBinaryEncoder.h
InflatingStream.h
Instantiator.h
JSONString.h
KeyValueArgs.h
LRUCache.h
LRUStrategy.h
Latin1Encoding.h
Latin2Encoding.h
Latin9Encoding.h
LineEndingConverter.h
LinearHashTable.h
ListMap.h
LocalDateTime.h
LogFile.h
LogFile_STD.h
LogFile_WIN32U.h
LogStream.h
Logger.h
LoggingFactory.h
LoggingRegistry.h
MD4Engine.h
MD5Engine.h
Manifest.h
MemoryPool.h
MemoryStream.h
Message.h
MetaObject.h
MetaProgramming.h
Mutex.h
Mutex_POSIX.h
Mutex_VX.h
Mutex_WIN32.h
Mutex_WINCE.h
NObserver.h
NamedEvent.h
NamedEvent_Android.h
NamedEvent_UNIX.h
NamedEvent_WIN32U.h
NamedMutex.h
NamedMutex_Android.h
NamedMutex_UNIX.h
NamedMutex_WIN32U.h
NamedTuple.h
NestedDiagnosticContext.h
Notification.h
NotificationCenter.h
NotificationQueue.h
NotificationStrategy.h
NullChannel.h
NullStream.h
Nullable.h
NumberFormatter.h
NumberParser.h
NumericString.h
ObjectPool.h
Observer.h
Optional.h
OrderedMap.h
OrderedSet.h
PBKDF2Engine.h
Path.h
Path_UNIX.h
Path_WIN32U.h
Path_WINCE.h
PatternFormatter.h
Pipe.h
PipeImpl.h
PipeImpl_DUMMY.h
PipeImpl_POSIX.h
PipeImpl_WIN32.h
PipeStream.h
Platform.h
Platform_POSIX.h
Platform_VX.h
Platform_WIN32.h
Poco.h
PriorityDelegate.h
PriorityEvent.h
PriorityExpire.h
PriorityNotificationQueue.h
PriorityStrategy.h
Process.h
Process_UNIX.h
Process_VX.h
Process_WIN32U.h
Process_WINCE.h
PurgeStrategy.h
RWLock.h
RWLock_Android.h
RWLock_POSIX.h
RWLock_VX.h
RWLock_WIN32.h
RWLock_WINCE.h
Random.h
RandomStream.h
RecursiveDirectoryIterator.h
RecursiveDirectoryIteratorImpl.h
RefCountedObject.h
RegularExpression.h
RotateStrategy.h
Runnable.h
RunnableAdapter.h
SHA1Engine.h
SHA2Engine.h
ScopedLock.h
ScopedUnlock.h
Semaphore.h
Semaphore_POSIX.h
Semaphore_VX.h
Semaphore_WIN32.h
SharedLibrary.h
SharedLibrary_HPUX.h
SharedLibrary_UNIX.h
SharedLibrary_VX.h
SharedLibrary_WIN32U.h
SharedMemory.h
SharedMemory_DUMMY.h
SharedMemory_POSIX.h
SharedMemory_WIN32.h
SharedPtr.h
SignalHandler.h
SimpleFileChannel.h
SimpleHashTable.h
SingletonHolder.h
SortedDirectoryIterator.h
SplitterChannel.h
Stopwatch.h
StrategyCollection.h
StreamChannel.h
StreamConverter.h
StreamCopier.h
StreamTokenizer.h
StreamUtil.h
String.h
StringTokenizer.h
SynchronizedObject.h
SyslogChannel.h
Task.h
TaskManager.h
TaskNotification.h
TeeStream.h
TemporaryFile.h
TextBufferIterator.h
TextConverter.h
TextEncoding.h
TextIterator.h
Thread.h
ThreadLocal.h
ThreadPool.h
ThreadTarget.h
Thread_POSIX.h
Thread_VX.h
Thread_WIN32.h
Thread_WINCE.h
TimedNotificationQueue.h
Timer.h
Timespan.h
Timestamp.h
Timezone.h
Token.h
Tuple.h
TypeList.h
Types.h
URI.h
URIStreamFactory.h
URIStreamOpener.h
UTF16Encoding.h
UTF32Encoding.h
UTF8Encoding.h
UTF8String.h
UTFString.h
UUID.h
UUIDGenerator.h
UnWindows.h
UnbufferedStreamBuf.h
Unicode.h
UnicodeConverter.h
UniqueAccessExpireCache.h
UniqueAccessExpireLRUCache.h
UniqueAccessExpireStrategy.h
UniqueExpireCache.h
UniqueExpireLRUCache.h
UniqueExpireStrategy.h
ValidArgs.h
Version.h
Void.h
Windows1250Encoding.h
Windows1251Encoding.h
Windows1252Encoding.h
WindowsConsoleChannel.h
ordered_hash.h
ordered_map.h
ordered_set.h
zconf.h
zlib.h
samples
src
testsuite
wcelibcex-1.0
CMakeLists.txt
Foundation_vs140.sln
Foundation_vs140.vcxproj
Foundation_vs140.vcxproj.filters
Foundation_vs150.sln
Foundation_vs150.vcxproj
Foundation_vs150.vcxproj.filters
Foundation_vs160.sln
Foundation_vs160.vcxproj
Foundation_vs160.vcxproj.filters
Makefile
extradirs
JSON
JWT
MongoDB
Net
NetSSL_OpenSSL
NetSSL_Win
PDF
PageCompiler
PocoDoc
ProGen
Redis
SevenZip
Util
XML
Zip
appveyor
build
cmake
contrib
doc
packaging
patches
release
travis
.gitattributes
.gitignore
.gitmodules
.travis.yml
CHANGELOG
CMakeLists.txt
CODE_OF_CONDUCT.md
CONTRIBUTING.md
CONTRIBUTORS
LICENSE
Makefile
NEWS
README
README.md
VERSION
appveyor.yml
build_cmake.cmd
build_cmake.sh
build_vs140.cmd
build_vs150.cmd
build_vs160.cmd
buildwin.cmd
buildwin.ps1
components
configure
cppignore.lnx
cppignore.win
env.bat
env.sh
libversion
SimpleIni
Squirrel
TinyDir
ZMQ
CMakeLists.txt
.gitignore
.gitmodules
CMakeLists.txt
LICENSE
README.md
Switched to POCO library for unified platform/library interface. Deprecated the external module API. It was creating more problems than solving. Removed most built-in libraries in favor of system libraries for easier maintenance. Cleaned and secured code with help from static analyzers.
306 lines
6.4 KiB
C++
306 lines
6.4 KiB
C++
//
|
|
// UTFString.h
|
|
//
|
|
// Library: Foundation
|
|
// Package: Text
|
|
// Module: UTFString
|
|
//
|
|
// Definitions of strings for UTF encodings.
|
|
//
|
|
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
//
|
|
|
|
|
|
#ifndef Foundation_UTFString_INCLUDED
|
|
#define Foundation_UTFString_INCLUDED
|
|
|
|
|
|
#include "Poco/Foundation.h"
|
|
#include "Poco/Types.h"
|
|
#include <string>
|
|
|
|
|
|
namespace Poco {
|
|
|
|
|
|
struct UTF16CharTraits
|
|
{
|
|
typedef std::fpos<std::mbstate_t> u16streampos;
|
|
typedef UInt16 char_type;
|
|
typedef int int_type;
|
|
typedef std::streamoff off_type;
|
|
typedef u16streampos pos_type;
|
|
typedef std::mbstate_t state_type;
|
|
|
|
static void assign(char_type& c1, const char_type& c2)
|
|
{
|
|
c1 = c2;
|
|
}
|
|
|
|
static bool eq(char_type c1, char_type c2)
|
|
{
|
|
return c1 == c2;
|
|
}
|
|
|
|
static bool lt(char_type c1, char_type c2)
|
|
{
|
|
return c1 < c2;
|
|
}
|
|
|
|
static int compare(const char_type* s1, const char_type* s2, std::size_t n)
|
|
{
|
|
for (; n; --n, ++s1, ++s2)
|
|
{
|
|
if (lt(*s1, *s2))
|
|
return -1;
|
|
if (lt(*s2, *s1))
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static std::size_t length(const char_type* s)
|
|
{
|
|
std::size_t len = 0;
|
|
for (; !eq(*s, char_type(0)); ++s)
|
|
++len;
|
|
return len;
|
|
}
|
|
|
|
static const char_type* find(const char_type* s, std::size_t n, const char_type& a)
|
|
{
|
|
for (; n; --n)
|
|
{
|
|
if (eq(*s, a))
|
|
return s;
|
|
++s;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static char_type* move(char_type* s1, const char_type* s2, std::size_t n)
|
|
{
|
|
char_type* r = s1;
|
|
if (s1 < s2)
|
|
{
|
|
for (; n; --n, ++s1, ++s2)
|
|
assign(*s1, *s2);
|
|
}
|
|
else if (s2 < s1)
|
|
{
|
|
s1 += n;
|
|
s2 += n;
|
|
for (; n; --n)
|
|
assign(*--s1, *--s2);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
static char_type* copy(char_type* s1, const char_type* s2, std::size_t n)
|
|
{
|
|
poco_assert(s2 < s1 || s2 >= s1 + n);
|
|
char_type* r = s1;
|
|
for (; n; --n, ++s1, ++s2)
|
|
assign(*s1, *s2);
|
|
return r;
|
|
}
|
|
|
|
static char_type* assign(char_type* s, std::size_t n, char_type a)
|
|
{
|
|
char_type* r = s;
|
|
for (; n; --n, ++s)
|
|
assign(*s, a);
|
|
return r;
|
|
}
|
|
|
|
static int_type not_eof(int_type c)
|
|
{
|
|
return eq_int_type(c, eof()) ? ~eof() : c;
|
|
}
|
|
|
|
static char_type to_char_type(int_type c)
|
|
{
|
|
return char_type(c);
|
|
}
|
|
|
|
static int_type to_int_type(char_type c)
|
|
{
|
|
return int_type(c);
|
|
}
|
|
|
|
static bool eq_int_type(int_type c1, int_type c2)
|
|
{
|
|
return c1 == c2;
|
|
}
|
|
|
|
static int_type eof()
|
|
{
|
|
return int_type(0xDFFF);
|
|
}
|
|
};
|
|
|
|
|
|
struct UTF32CharTraits
|
|
{
|
|
typedef std::fpos<std::mbstate_t> u32streampos;
|
|
typedef UInt32 char_type;
|
|
typedef int int_type;
|
|
typedef std::streamoff off_type;
|
|
typedef u32streampos pos_type;
|
|
typedef std::mbstate_t state_type;
|
|
|
|
static void assign(char_type& c1, const char_type& c2)
|
|
{
|
|
c1 = c2;
|
|
}
|
|
|
|
static bool eq(char_type c1, char_type c2)
|
|
{
|
|
return c1 == c2;
|
|
}
|
|
|
|
static bool lt(char_type c1, char_type c2)
|
|
{
|
|
return c1 < c2;
|
|
}
|
|
|
|
static int compare(const char_type* s1, const char_type* s2, std::size_t n)
|
|
{
|
|
for (; n; --n, ++s1, ++s2)
|
|
{
|
|
if (lt(*s1, *s2))
|
|
return -1;
|
|
if (lt(*s2, *s1))
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static std::size_t length(const char_type* s)
|
|
{
|
|
std::size_t len = 0;
|
|
for (; !eq(*s, char_type(0)); ++s)
|
|
++len;
|
|
return len;
|
|
}
|
|
|
|
static const char_type* find(const char_type* s, std::size_t n, const char_type& a)
|
|
{
|
|
for (; n; --n)
|
|
{
|
|
if (eq(*s, a))
|
|
return s;
|
|
++s;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static char_type* move(char_type* s1, const char_type* s2, std::size_t n)
|
|
{
|
|
char_type* r = s1;
|
|
if (s1 < s2)
|
|
{
|
|
for (; n; --n, ++s1, ++s2)
|
|
assign(*s1, *s2);
|
|
}
|
|
else if (s2 < s1)
|
|
{
|
|
s1 += n;
|
|
s2 += n;
|
|
for (; n; --n)
|
|
assign(*--s1, *--s2);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
static char_type* copy(char_type* s1, const char_type* s2, std::size_t n)
|
|
{
|
|
poco_assert(s2 < s1 || s2 >= s1 + n);
|
|
char_type* r = s1;
|
|
for (; n; --n, ++s1, ++s2)
|
|
assign(*s1, *s2);
|
|
return r;
|
|
}
|
|
|
|
static char_type* assign(char_type* s, std::size_t n, char_type a)
|
|
{
|
|
char_type* r = s;
|
|
for (; n; --n, ++s)
|
|
assign(*s, a);
|
|
return r;
|
|
}
|
|
|
|
static int_type not_eof(int_type c)
|
|
{
|
|
return eq_int_type(c, eof()) ? ~eof() : c;
|
|
}
|
|
|
|
static char_type to_char_type(int_type c)
|
|
{
|
|
return char_type(c);
|
|
}
|
|
|
|
static int_type to_int_type(char_type c)
|
|
{
|
|
return int_type(c);
|
|
}
|
|
|
|
static bool eq_int_type(int_type c1, int_type c2)
|
|
{
|
|
return c1 == c2;
|
|
}
|
|
|
|
static int_type eof()
|
|
{
|
|
return int_type(0xDFFF);
|
|
}
|
|
};
|
|
|
|
|
|
//#if defined(POCO_ENABLE_CPP11) //TODO
|
|
// typedef char16_t UTF16Char;
|
|
// typedef std::u16string UTF16String;
|
|
// typedef char32_t UTF32Char;
|
|
// typedef std::u32string UTF32String;
|
|
//#else
|
|
#ifdef POCO_NO_WSTRING
|
|
typedef Poco::UInt16 UTF16Char;
|
|
typedef std::basic_string<UTF16Char, UTF16CharTraits> UTF16String;
|
|
typedef UInt32 UTF32Char;
|
|
typedef std::basic_string<UTF32Char, UTF32CharTraits> UTF32String;
|
|
#else // POCO_NO_WSTRING
|
|
#if defined(POCO_OS_FAMILY_WINDOWS)
|
|
typedef wchar_t UTF16Char;
|
|
typedef std::wstring UTF16String;
|
|
typedef UInt32 UTF32Char;
|
|
typedef std::basic_string<UTF32Char, UTF32CharTraits> UTF32String;
|
|
#elif defined(__SIZEOF_WCHAR_T__) //gcc
|
|
#if (__SIZEOF_WCHAR_T__ == 2)
|
|
typedef wchar_t UTF16Char;
|
|
typedef std::wstring UTF16String;
|
|
typedef UInt32 UTF32Char;
|
|
typedef std::basic_string<UTF32Char, UTF32CharTraits> UTF32String;
|
|
#elif (__SIZEOF_WCHAR_T__ == 4)
|
|
typedef Poco::UInt16 UTF16Char;
|
|
typedef std::basic_string<UTF16Char, UTF16CharTraits> UTF16String;
|
|
typedef wchar_t UTF32Char;
|
|
typedef std::wstring UTF32String;
|
|
#endif
|
|
#else // default to 32-bit wchar_t
|
|
typedef Poco::UInt16 UTF16Char;
|
|
typedef std::basic_string<UTF16Char, UTF16CharTraits> UTF16String;
|
|
typedef wchar_t UTF32Char;
|
|
typedef std::wstring UTF32String;
|
|
#endif //POCO_OS_FAMILY_WINDOWS
|
|
#endif //POCO_NO_WSTRING
|
|
//#endif // POCO_ENABLE_CPP11
|
|
|
|
|
|
} // namespace Poco
|
|
|
|
|
|
#endif // Foundation_UTFString_INCLUDED
|