lean cpp library
A lean C++ library providing efficient utility classes for high-performance C++ applications.
|
00001 /*****************************************************/ 00002 /* lean Strings (c) Tobias Zirr 2011 */ 00003 /*****************************************************/ 00004 00005 #ifndef LEAN_STRINGS_TYPES 00006 #define LEAN_STRINGS_TYPES 00007 00008 #include "../lean.h" 00009 #include "char_traits.h" 00010 #include "nullterminated.h" 00011 #include "nullterminated_range.h" 00012 #include "range.h" 00013 #include <string> 00014 00015 namespace lean 00016 { 00017 namespace strings 00018 { 00019 namespace types 00020 { 00021 00023 typedef nullterminated_implicit<char> char_nti; 00025 typedef nullterminated<char> char_nt; 00027 typedef nullterminated_range_implicit<char> char_ntri; 00029 typedef nullterminated_range<char> char_ntr; 00030 00032 typedef nullterminated_implicit<wchar_t> wchar_nti; 00034 typedef nullterminated<wchar_t> wchar_nt; 00036 typedef nullterminated_range_implicit<wchar_t> wchar_ntri; 00038 typedef nullterminated_range<wchar_t> wchar_ntr; 00039 00040 00042 typedef nullterminated_implicit<char1> char1_nti; 00044 typedef nullterminated<char1> char1_nt; 00046 typedef nullterminated_range_implicit<char1> char1_ntri; 00048 typedef nullterminated_range<char1> char1_ntr; 00049 00051 typedef nullterminated_implicit<char2> char2_nti; 00053 typedef nullterminated<char2> char2_nt; 00055 typedef nullterminated_range_implicit<char2> char2_ntri; 00057 typedef nullterminated_range<char2> char2_ntr; 00058 00060 typedef nullterminated_implicit<char4> char4_nti; 00062 typedef nullterminated<char4> char4_nt; 00064 typedef nullterminated_range_implicit<char4> char4_ntri; 00066 typedef nullterminated_range<char4> char4_ntr; 00067 00069 typedef std::basic_string<char1> char1_string; 00071 typedef std::basic_string<char2> char2_string; 00073 typedef std::basic_string<char4> char4_string; 00074 00076 typedef nullterminated_implicit<utf8_t> utf8_nti; 00078 typedef nullterminated<utf8_t> utf8_nt; 00080 typedef nullterminated_range_implicit<utf8_t> utf8_ntri; 00082 typedef nullterminated_range<utf8_t> utf8_ntr; 00083 00085 typedef nullterminated_implicit<utf16_t> utf16_nti; 00087 typedef nullterminated<utf16_t> utf16_nt; 00089 typedef nullterminated_range_implicit<utf16_t> utf16_ntri; 00091 typedef nullterminated_range<utf16_t> utf16_ntr; 00092 00094 typedef nullterminated_implicit<utf32_t> utf32_nti; 00096 typedef nullterminated<utf32_t> utf32_nt; 00098 typedef nullterminated_range_implicit<utf32_t> utf32_ntri; 00100 typedef nullterminated_range<utf32_t> utf32_ntr; 00101 00103 typedef std::basic_string<utf8_t> utf8_string; 00105 typedef std::basic_string<utf16_t> utf16_string; 00107 typedef std::basic_string<utf32_t> utf32_string; 00108 00109 } // namespace 00110 00111 using namespace types; 00112 00113 // STL compatibility 00114 template <class Char, class StringTraits, class StringAllocator, class NullterminatedTraits> 00115 struct nullterminated_compatible< std::basic_string<Char, StringTraits, StringAllocator>, Char, NullterminatedTraits > 00116 { 00117 typedef std::basic_string<Char, StringTraits, StringAllocator> compatible_type; 00118 00119 static LEAN_INLINE const Char* from(const compatible_type &from) { return from.c_str(); } 00120 static LEAN_INLINE const Char* from(const compatible_type &from, const Char *begin) { return begin + from.size(); } 00121 static compatible_type to(const Char *begin) { return compatible_type(begin); } 00122 static compatible_type to(const Char *begin, const Char *end) { return compatible_type(begin, end); } 00123 }; 00124 00126 template <class Type, size_t Size> 00127 LEAN_INLINE size_t ntarraylen(Type (&)[Size]) 00128 { 00129 return (Size > 0) 00130 ? static_cast<size_t>(Size - 1) 00131 : 0; 00132 } 00133 00134 } // namespace 00135 00136 using strings::char_nti; 00137 using strings::char_nt; 00138 using strings::char_ntri; 00139 using strings::char_ntr; 00140 using strings::wchar_nti; 00141 using strings::wchar_nt; 00142 using strings::wchar_ntri; 00143 using strings::wchar_ntr; 00144 00145 using strings::char1_nti; 00146 using strings::char1_nt; 00147 using strings::char1_ntri; 00148 using strings::char1_ntr; 00149 using strings::char2_nti; 00150 using strings::char2_nt; 00151 using strings::char2_ntri; 00152 using strings::char2_ntr; 00153 using strings::char4_nti; 00154 using strings::char4_nt; 00155 using strings::char4_ntri; 00156 using strings::char4_ntr; 00157 00158 using strings::char1_string; 00159 using strings::char2_string; 00160 using strings::char4_string; 00161 00162 using strings::utf8_nti; 00163 using strings::utf8_nt; 00164 using strings::utf8_ntri; 00165 using strings::utf8_ntr; 00166 00167 using strings::utf16_nti; 00168 using strings::utf16_nt; 00169 using strings::utf16_ntri; 00170 using strings::utf16_ntr; 00171 00172 using strings::utf32_nti; 00173 using strings::utf32_nt; 00174 using strings::utf32_ntri; 00175 using strings::utf32_ntr; 00176 00177 using strings::utf8_string; 00178 using strings::utf16_string; 00179 using strings::utf32_string; 00180 00181 using strings::ntarraylen; 00182 00183 } // namespace 00184 00185 #endif