Guest User

Untitled

a guest
Nov 17th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.10 KB | None | 0 0
  1. using collation_t = struct _collation {
  2. wchar_t l;
  3. wchar_t u;
  4. };
  5.  
  6. template<const size_t normal>
  7. constexpr collation_t COLLATION() {
  8. return { normal, normal };
  9. }
  10. template<const size_t lower, const size_t upper>
  11. constexpr collation_t COLLATION() {
  12. return { lower, upper };
  13. }
  14. template<const size_t number, const size_t lower, const size_t upper>
  15. constexpr collation_t COLLATION() {
  16. return { lower, upper };
  17. }
  18.  
  19. const collation_t collation_ascii[256]={
  20. COLLATION_RANGE<0, 64>(),
  21. COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
  22. COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
  23. COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
  24. COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
  25. COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
  26. COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
  27. COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
  28. COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
  29. COLLATION<'y','Y'>(), COLLATION<'z','Z'>(),
  30. COLLATION_RANGE<91,60>(),
  31. COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
  32. COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
  33. COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
  34. COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
  35. COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
  36. COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
  37. COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
  38. COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
  39. COLLATION<'y','Y'>(), COLLATION<'z','Z'>(),
  40. COLLATION_RANGE<123,255>()
  41. }
  42.  
  43. const collation_t collation_ascii[256]={
  44. COLLATION<0>(), COLLATION<1>(), COLLATION<2>(), COLLATION<3>(),
  45. COLLATION<4>(), COLLATION<5>(), COLLATION<6>(), COLLATION<7>(),
  46. COLLATION<8>(), COLLATION<9>(), COLLATION<10>(), COLLATION<11>(),
  47. COLLATION<12>(), COLLATION<13>(), COLLATION<14>(), COLLATION<15>(),
  48. COLLATION<16>(), COLLATION<17>(), COLLATION<18>(), COLLATION<19>(),
  49. COLLATION<20>(), COLLATION<21>(), COLLATION<22>(), COLLATION<23>(),
  50. COLLATION<24>(), COLLATION<25>(), COLLATION<26>(), COLLATION<27>(),
  51. COLLATION<28>(), COLLATION<29>(), COLLATION<30>(), COLLATION<31>(),
  52. COLLATION<' '>(), COLLATION<'!'>(), COLLATION<'"'>(), COLLATION<'#'>(),
  53. COLLATION<'$'>(), COLLATION<'%'>(), COLLATION<'&'>(), COLLATION<'''>(),
  54. COLLATION<'('>(), COLLATION<')'>(), COLLATION<'*'>(), COLLATION<'+'>(),
  55. COLLATION<','>(), COLLATION<'-'>(), COLLATION<'.'>(), COLLATION<'/'>(),
  56. COLLATION<'0'>(), COLLATION<'1'>(), COLLATION<'2'>(), COLLATION<'3'>(),
  57. COLLATION<'4'>(), COLLATION<'5'>(), COLLATION<'6'>(), COLLATION<'7'>(),
  58. COLLATION<'8'>(), COLLATION<'9'>(), COLLATION<':'>(), COLLATION<';'>(),
  59. COLLATION<'<'>(), COLLATION<'='>(), COLLATION<'>'>(), COLLATION<'?'>(),
  60. COLLATION<'@'>(),
  61. COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
  62. COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
  63. COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
  64. COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
  65. COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
  66. COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
  67. COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
  68. COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
  69. COLLATION<'y','Y'>(), COLLATION<'z','Z'>(), COLLATION<'['>(),
  70. COLLATION<'\'>(), COLLATION<']'>(), COLLATION<'^'>(), COLLATION<'_'>(),
  71. COLLATION<'`'>(),
  72. COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
  73. COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
  74. COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
  75. COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
  76. COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
  77. COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
  78. COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
  79. COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
  80. COLLATION<'y','Y'>(), COLLATION<'z','Z'>(), COLLATION<'{'>(),
  81. COLLATION<'|'>(), COLLATION<'}'>(), COLLATION<'~'>(), COLLATION<127>(),
  82. COLLATION<128>(), COLLATION<129>(),
  83. COLLATION<130>(), COLLATION<131>(), COLLATION<132>(), COLLATION<133>(),
  84. COLLATION<134>(), COLLATION<135>(), COLLATION<136>(), COLLATION<137>(),
  85. COLLATION<138>(), COLLATION<139>(),
  86. COLLATION<140>(), COLLATION<141>(), COLLATION<142>(), COLLATION<143>(),
  87. COLLATION<144>(), COLLATION<145>(), COLLATION<146>(), COLLATION<147>(),
  88. COLLATION<148>(), COLLATION<149>(),
  89. COLLATION<150>(), COLLATION<151>(), COLLATION<152>(), COLLATION<153>(),
  90. COLLATION<154>(), COLLATION<155>(), COLLATION<156>(), COLLATION<157>(),
  91. COLLATION<158>(), COLLATION<159>(),
  92. COLLATION<160>(), COLLATION<161>(), COLLATION<162>(), COLLATION<163>(),
  93. COLLATION<164>(), COLLATION<165>(), COLLATION<166>(), COLLATION<167>(),
  94. COLLATION<168>(), COLLATION<169>(),
  95. COLLATION<170>(), COLLATION<171>(), COLLATION<172>(), COLLATION<173>(),
  96. COLLATION<174>(), COLLATION<175>(), COLLATION<176>(), COLLATION<177>(),
  97. COLLATION<178>(), COLLATION<179>(),
  98. COLLATION<180>(), COLLATION<181>(), COLLATION<182>(), COLLATION<183>(),
  99. COLLATION<184>(), COLLATION<185>(), COLLATION<186>(), COLLATION<187>(),
  100. COLLATION<188>(), COLLATION<189>(),
  101. COLLATION<190>(), COLLATION<191>(), COLLATION<192>(), COLLATION<193>(),
  102. COLLATION<194>(), COLLATION<195>(), COLLATION<196>(), COLLATION<197>(),
  103. COLLATION<198>(), COLLATION<199>(),
  104. COLLATION<200>(), COLLATION<201>(), COLLATION<202>(), COLLATION<203>(),
  105. COLLATION<204>(), COLLATION<205>(), COLLATION<206>(), COLLATION<207>(),
  106. COLLATION<208>(), COLLATION<209>(),
  107. COLLATION<210>(), COLLATION<211>(), COLLATION<212>(), COLLATION<213>(),
  108. COLLATION<214>(), COLLATION<215>(), COLLATION<216>(), COLLATION<217>(),
  109. COLLATION<218>(), COLLATION<219>(),
  110. COLLATION<220>(), COLLATION<221>(), COLLATION<222>(), COLLATION<223>(),
  111. COLLATION<224>(), COLLATION<225>(), COLLATION<226>(), COLLATION<227>(),
  112. COLLATION<228>(), COLLATION<229>(),
  113. COLLATION<230>(), COLLATION<231>(), COLLATION<232>(), COLLATION<233>(),
  114. COLLATION<234>(), COLLATION<235>(), COLLATION<236>(), COLLATION<237>(),
  115. COLLATION<238>(), COLLATION<239>(),
  116. COLLATION<240>(), COLLATION<241>(), COLLATION<242>(), COLLATION<243>(),
  117. COLLATION<244>(), COLLATION<245>(), COLLATION<246>(), COLLATION<247>(),
  118. COLLATION<248>(), COLLATION<249>(),
  119. COLLATION<250>(), COLLATION<251>(), COLLATION<252>(), COLLATION<253>(),
  120. COLLATION<254>(), COLLATION<255>()
  121. }
  122.  
  123. struct collation_t
  124. {
  125. wchar_t l;
  126. wchar_t u;
  127. };
  128.  
  129. constexpr std::array<collation_t, 256> collation_ascii = []{
  130. std::array<collation_t, 256> ret{};
  131. for (int i = 0; i < 256; i++)
  132. {
  133. char ch = i;
  134. if (ch >= 'a' && ch <= 'z')
  135. ret[i] = {ch, ch + 'A' - 'a'};
  136. else if (ch >= 'A' && ch <= 'Z')
  137. ret[i] = {ch + 'a' - 'A', ch};
  138. else
  139. ret[i] = {ch, ch};
  140. }
  141. return ret;
  142. }();
  143.  
  144. struct Collation{
  145. wchar_t l;
  146. wchar_t u;
  147. };
  148.  
  149. template<wchar_t normal>
  150. constexpr Collation makeCollation(){
  151. return {normal, normal};
  152. }
  153.  
  154. template<>
  155. constexpr Collation makeCollation<'a'>(){
  156. return {'a', 'A'};
  157. }
  158.  
  159. #define COLLATE(lower, upper)
  160. template<>
  161. constexpr Collation makeCollation<(lower)>(){
  162. return {(lower), (upper)};
  163. }
  164.  
  165. COLLATE('a', 'A')
  166.  
  167. // Эквивалент
  168. // std::array<Collation, 256> collationArray = {
  169. // makeCollation<0>(),
  170. // makeCollation<1>(),
  171. // makeCollation<2>(),
  172. // ...
  173. // makeCollation<255>()
  174. // };
  175.  
  176. template<std::size_t size, wchar_t... indexes>
  177. constexpr std::array<Collation, size> createCollatioAarrayImpl(std::integer_sequence<wchar_t, indexes...>){
  178. return std::array<Collation, size>{ makeCollation<indexes>()... };
  179. }
  180.  
  181. template<std::size_t size>
  182. constexpr std::array<Collation, size> createCollatioAarray(){
  183. return createCollatioAarrayImpl<size>(std::make_integer_sequence<wchar_t, size>{});
  184. }
  185.  
  186. constexpr auto collationArray = createCollatioAarray<256>();
  187.  
  188. int main(){
  189. std::wcout << collationArray['a'].u; //A
  190. }
  191.  
  192. struct CollationArray{
  193. static constexpr int size = 256;
  194. Collation array[size];
  195. };
  196.  
  197. template<wchar_t... indexes>
  198. struct CollationIndexes{};
  199.  
  200. template<wchar_t size, wchar_t... indexes>
  201. struct MakeCollationIndexes : MakeCollationIndexes<size - 1, size - 1, indexes...>{};
  202.  
  203. template<wchar_t... indexes>
  204. struct MakeCollationIndexes<0, indexes...> : CollationIndexes<indexes...>{};
  205.  
  206. template<wchar_t... indexes>
  207. constexpr CollationArray createCollatioAarrayImpl(CollationIndexes<indexes...>){
  208. return CollationArray{ makeCollation<indexes>()... };
  209. }
  210.  
  211. constexpr CollationArray createCollatioAarray(){
  212. return createCollatioAarrayImpl(MakeCollationIndexes<CollationArray::size>());
  213. }
  214.  
  215. constexpr auto collationArray = createCollatioAarray();
  216.  
  217. int main(){
  218. std::wcout << collationArray['a'].u; //A
  219. }
Add Comment
Please, Sign In to add comment