Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using collation_t = struct _collation {
- wchar_t l;
- wchar_t u;
- };
- template<const size_t normal>
- constexpr collation_t COLLATION() {
- return { normal, normal };
- }
- template<const size_t lower, const size_t upper>
- constexpr collation_t COLLATION() {
- return { lower, upper };
- }
- template<const size_t number, const size_t lower, const size_t upper>
- constexpr collation_t COLLATION() {
- return { lower, upper };
- }
- const collation_t collation_ascii[256]={
- COLLATION_RANGE<0, 64>(),
- COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
- COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
- COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
- COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
- COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
- COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
- COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
- COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
- COLLATION<'y','Y'>(), COLLATION<'z','Z'>(),
- COLLATION_RANGE<91,60>(),
- COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
- COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
- COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
- COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
- COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
- COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
- COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
- COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
- COLLATION<'y','Y'>(), COLLATION<'z','Z'>(),
- COLLATION_RANGE<123,255>()
- }
- const collation_t collation_ascii[256]={
- COLLATION<0>(), COLLATION<1>(), COLLATION<2>(), COLLATION<3>(),
- COLLATION<4>(), COLLATION<5>(), COLLATION<6>(), COLLATION<7>(),
- COLLATION<8>(), COLLATION<9>(), COLLATION<10>(), COLLATION<11>(),
- COLLATION<12>(), COLLATION<13>(), COLLATION<14>(), COLLATION<15>(),
- COLLATION<16>(), COLLATION<17>(), COLLATION<18>(), COLLATION<19>(),
- COLLATION<20>(), COLLATION<21>(), COLLATION<22>(), COLLATION<23>(),
- COLLATION<24>(), COLLATION<25>(), COLLATION<26>(), COLLATION<27>(),
- COLLATION<28>(), COLLATION<29>(), COLLATION<30>(), COLLATION<31>(),
- COLLATION<' '>(), COLLATION<'!'>(), COLLATION<'"'>(), COLLATION<'#'>(),
- COLLATION<'$'>(), COLLATION<'%'>(), COLLATION<'&'>(), COLLATION<'''>(),
- COLLATION<'('>(), COLLATION<')'>(), COLLATION<'*'>(), COLLATION<'+'>(),
- COLLATION<','>(), COLLATION<'-'>(), COLLATION<'.'>(), COLLATION<'/'>(),
- COLLATION<'0'>(), COLLATION<'1'>(), COLLATION<'2'>(), COLLATION<'3'>(),
- COLLATION<'4'>(), COLLATION<'5'>(), COLLATION<'6'>(), COLLATION<'7'>(),
- COLLATION<'8'>(), COLLATION<'9'>(), COLLATION<':'>(), COLLATION<';'>(),
- COLLATION<'<'>(), COLLATION<'='>(), COLLATION<'>'>(), COLLATION<'?'>(),
- COLLATION<'@'>(),
- COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
- COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
- COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
- COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
- COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
- COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
- COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
- COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
- COLLATION<'y','Y'>(), COLLATION<'z','Z'>(), COLLATION<'['>(),
- COLLATION<'\'>(), COLLATION<']'>(), COLLATION<'^'>(), COLLATION<'_'>(),
- COLLATION<'`'>(),
- COLLATION<'a','A'>(), COLLATION<'b','B'>(), COLLATION<'c','C'>(),
- COLLATION<'d','D'>(), COLLATION<'e','E'>(), COLLATION<'f','F'>(),
- COLLATION<'g','G'>(), COLLATION<'h','H'>(), COLLATION<'i','I'>(),
- COLLATION<'j','J'>(), COLLATION<'k','K'>(), COLLATION<'l','L'>(),
- COLLATION<'m','M'>(), COLLATION<'n','N'>(), COLLATION<'o','O'>(),
- COLLATION<'p','P'>(), COLLATION<'q','Q'>(), COLLATION<'r','R'>(),
- COLLATION<'s','S'>(), COLLATION<'t','T'>(), COLLATION<'u','U'>(),
- COLLATION<'v','V'>(), COLLATION<'w','W'>(), COLLATION<'x','X'>(),
- COLLATION<'y','Y'>(), COLLATION<'z','Z'>(), COLLATION<'{'>(),
- COLLATION<'|'>(), COLLATION<'}'>(), COLLATION<'~'>(), COLLATION<127>(),
- COLLATION<128>(), COLLATION<129>(),
- COLLATION<130>(), COLLATION<131>(), COLLATION<132>(), COLLATION<133>(),
- COLLATION<134>(), COLLATION<135>(), COLLATION<136>(), COLLATION<137>(),
- COLLATION<138>(), COLLATION<139>(),
- COLLATION<140>(), COLLATION<141>(), COLLATION<142>(), COLLATION<143>(),
- COLLATION<144>(), COLLATION<145>(), COLLATION<146>(), COLLATION<147>(),
- COLLATION<148>(), COLLATION<149>(),
- COLLATION<150>(), COLLATION<151>(), COLLATION<152>(), COLLATION<153>(),
- COLLATION<154>(), COLLATION<155>(), COLLATION<156>(), COLLATION<157>(),
- COLLATION<158>(), COLLATION<159>(),
- COLLATION<160>(), COLLATION<161>(), COLLATION<162>(), COLLATION<163>(),
- COLLATION<164>(), COLLATION<165>(), COLLATION<166>(), COLLATION<167>(),
- COLLATION<168>(), COLLATION<169>(),
- COLLATION<170>(), COLLATION<171>(), COLLATION<172>(), COLLATION<173>(),
- COLLATION<174>(), COLLATION<175>(), COLLATION<176>(), COLLATION<177>(),
- COLLATION<178>(), COLLATION<179>(),
- COLLATION<180>(), COLLATION<181>(), COLLATION<182>(), COLLATION<183>(),
- COLLATION<184>(), COLLATION<185>(), COLLATION<186>(), COLLATION<187>(),
- COLLATION<188>(), COLLATION<189>(),
- COLLATION<190>(), COLLATION<191>(), COLLATION<192>(), COLLATION<193>(),
- COLLATION<194>(), COLLATION<195>(), COLLATION<196>(), COLLATION<197>(),
- COLLATION<198>(), COLLATION<199>(),
- COLLATION<200>(), COLLATION<201>(), COLLATION<202>(), COLLATION<203>(),
- COLLATION<204>(), COLLATION<205>(), COLLATION<206>(), COLLATION<207>(),
- COLLATION<208>(), COLLATION<209>(),
- COLLATION<210>(), COLLATION<211>(), COLLATION<212>(), COLLATION<213>(),
- COLLATION<214>(), COLLATION<215>(), COLLATION<216>(), COLLATION<217>(),
- COLLATION<218>(), COLLATION<219>(),
- COLLATION<220>(), COLLATION<221>(), COLLATION<222>(), COLLATION<223>(),
- COLLATION<224>(), COLLATION<225>(), COLLATION<226>(), COLLATION<227>(),
- COLLATION<228>(), COLLATION<229>(),
- COLLATION<230>(), COLLATION<231>(), COLLATION<232>(), COLLATION<233>(),
- COLLATION<234>(), COLLATION<235>(), COLLATION<236>(), COLLATION<237>(),
- COLLATION<238>(), COLLATION<239>(),
- COLLATION<240>(), COLLATION<241>(), COLLATION<242>(), COLLATION<243>(),
- COLLATION<244>(), COLLATION<245>(), COLLATION<246>(), COLLATION<247>(),
- COLLATION<248>(), COLLATION<249>(),
- COLLATION<250>(), COLLATION<251>(), COLLATION<252>(), COLLATION<253>(),
- COLLATION<254>(), COLLATION<255>()
- }
- struct collation_t
- {
- wchar_t l;
- wchar_t u;
- };
- constexpr std::array<collation_t, 256> collation_ascii = []{
- std::array<collation_t, 256> ret{};
- for (int i = 0; i < 256; i++)
- {
- char ch = i;
- if (ch >= 'a' && ch <= 'z')
- ret[i] = {ch, ch + 'A' - 'a'};
- else if (ch >= 'A' && ch <= 'Z')
- ret[i] = {ch + 'a' - 'A', ch};
- else
- ret[i] = {ch, ch};
- }
- return ret;
- }();
- struct Collation{
- wchar_t l;
- wchar_t u;
- };
- template<wchar_t normal>
- constexpr Collation makeCollation(){
- return {normal, normal};
- }
- template<>
- constexpr Collation makeCollation<'a'>(){
- return {'a', 'A'};
- }
- #define COLLATE(lower, upper)
- template<>
- constexpr Collation makeCollation<(lower)>(){
- return {(lower), (upper)};
- }
- COLLATE('a', 'A')
- // Эквивалент
- // std::array<Collation, 256> collationArray = {
- // makeCollation<0>(),
- // makeCollation<1>(),
- // makeCollation<2>(),
- // ...
- // makeCollation<255>()
- // };
- template<std::size_t size, wchar_t... indexes>
- constexpr std::array<Collation, size> createCollatioAarrayImpl(std::integer_sequence<wchar_t, indexes...>){
- return std::array<Collation, size>{ makeCollation<indexes>()... };
- }
- template<std::size_t size>
- constexpr std::array<Collation, size> createCollatioAarray(){
- return createCollatioAarrayImpl<size>(std::make_integer_sequence<wchar_t, size>{});
- }
- constexpr auto collationArray = createCollatioAarray<256>();
- int main(){
- std::wcout << collationArray['a'].u; //A
- }
- struct CollationArray{
- static constexpr int size = 256;
- Collation array[size];
- };
- template<wchar_t... indexes>
- struct CollationIndexes{};
- template<wchar_t size, wchar_t... indexes>
- struct MakeCollationIndexes : MakeCollationIndexes<size - 1, size - 1, indexes...>{};
- template<wchar_t... indexes>
- struct MakeCollationIndexes<0, indexes...> : CollationIndexes<indexes...>{};
- template<wchar_t... indexes>
- constexpr CollationArray createCollatioAarrayImpl(CollationIndexes<indexes...>){
- return CollationArray{ makeCollation<indexes>()... };
- }
- constexpr CollationArray createCollatioAarray(){
- return createCollatioAarrayImpl(MakeCollationIndexes<CollationArray::size>());
- }
- constexpr auto collationArray = createCollatioAarray();
- int main(){
- std::wcout << collationArray['a'].u; //A
- }
Add Comment
Please, Sign In to add comment