fork download
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. constexpr unsigned int transform1(unsigned int x)
  5. {
  6. return ((x << 8) | x);
  7. }
  8.  
  9. constexpr unsigned int transform2(unsigned int x)
  10. {
  11. return (((x & 0x00f000f0) << 4) | (x & 0x000f000f));
  12. }
  13.  
  14. constexpr unsigned int transform3(unsigned int x)
  15. {
  16. return ((x << 4) | x);
  17. }
  18.  
  19. constexpr unsigned int transform(unsigned int x)
  20. {
  21. return transform3(transform2(transform1(x)));
  22. }
  23.  
  24. template <unsigned int argb> struct aarrggbb_v1
  25. {
  26. static const unsigned int value = transform(argb);
  27. };
  28.  
  29. template <unsigned int argb> struct aarrggbb_v2
  30. {
  31. static const unsigned int value =
  32. (argb & 0xf000) * 0x11000 +
  33. (argb & 0x0f00) * 0x01100 +
  34. (argb & 0x00f0) * 0x00110 +
  35. (argb & 0x000f) * 0x00011;;
  36. };
  37.  
  38. #define EXPAND16(x) aarrggbb_v1<x + 0>::value, \
  39. aarrggbb_v1<x + 1>::value, \
  40. aarrggbb_v1<x + 2>::value, \
  41. aarrggbb_v1<x + 3>::value, \
  42. aarrggbb_v1<x + 4>::value, \
  43. aarrggbb_v1<x + 5>::value, \
  44. aarrggbb_v1<x + 6>::value, \
  45. aarrggbb_v1<x + 7>::value, \
  46. aarrggbb_v1<x + 8>::value, \
  47. aarrggbb_v1<x + 9>::value, \
  48. aarrggbb_v1<x + 0xa>::value, \
  49. aarrggbb_v1<x + 0xb>::value, \
  50. aarrggbb_v1<x + 0xc>::value, \
  51. aarrggbb_v1<x + 0xd>::value, \
  52. aarrggbb_v1<x + 0xe>::value, \
  53. aarrggbb_v1<x + 0xf>::value
  54.  
  55. #define EXPAND EXPAND16(0), \
  56. EXPAND16(0x10), \
  57. EXPAND16(0x20), \
  58. EXPAND16(0x30), \
  59. EXPAND16(0x40), \
  60. EXPAND16(0x50), \
  61. EXPAND16(0x60), \
  62. EXPAND16(0x70), \
  63. EXPAND16(0x80), \
  64. EXPAND16(0x90), \
  65. EXPAND16(0xa0), \
  66. EXPAND16(0xb0), \
  67. EXPAND16(0xc0), \
  68. EXPAND16(0xd0), \
  69. EXPAND16(0xe0), \
  70. EXPAND16(0xf0), \
  71.  
  72. unsigned int table[] =
  73. {
  74. EXPAND
  75. };
  76.  
  77. int main()
  78. {
  79. for (auto n : table)
  80. std::cout << std::hex << n << '\n';
  81.  
  82. return 0;
  83. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
0
11
22
33
44
55
66
77
88
99
aa
bb
cc
dd
ee
ff
1100
1111
1122
1133
1144
1155
1166
1177
1188
1199
11aa
11bb
11cc
11dd
11ee
11ff
2200
2211
2222
2233
2244
2255
2266
2277
2288
2299
22aa
22bb
22cc
22dd
22ee
22ff
3300
3311
3322
3333
3344
3355
3366
3377
3388
3399
33aa
33bb
33cc
33dd
33ee
33ff
4400
4411
4422
4433
4444
4455
4466
4477
4488
4499
44aa
44bb
44cc
44dd
44ee
44ff
5500
5511
5522
5533
5544
5555
5566
5577
5588
5599
55aa
55bb
55cc
55dd
55ee
55ff
6600
6611
6622
6633
6644
6655
6666
6677
6688
6699
66aa
66bb
66cc
66dd
66ee
66ff
7700
7711
7722
7733
7744
7755
7766
7777
7788
7799
77aa
77bb
77cc
77dd
77ee
77ff
8800
8811
8822
8833
8844
8855
8866
8877
8888
8899
88aa
88bb
88cc
88dd
88ee
88ff
9900
9911
9922
9933
9944
9955
9966
9977
9988
9999
99aa
99bb
99cc
99dd
99ee
99ff
aa00
aa11
aa22
aa33
aa44
aa55
aa66
aa77
aa88
aa99
aaaa
aabb
aacc
aadd
aaee
aaff
bb00
bb11
bb22
bb33
bb44
bb55
bb66
bb77
bb88
bb99
bbaa
bbbb
bbcc
bbdd
bbee
bbff
cc00
cc11
cc22
cc33
cc44
cc55
cc66
cc77
cc88
cc99
ccaa
ccbb
cccc
ccdd
ccee
ccff
dd00
dd11
dd22
dd33
dd44
dd55
dd66
dd77
dd88
dd99
ddaa
ddbb
ddcc
dddd
ddee
ddff
ee00
ee11
ee22
ee33
ee44
ee55
ee66
ee77
ee88
ee99
eeaa
eebb
eecc
eedd
eeee
eeff
ff00
ff11
ff22
ff33
ff44
ff55
ff66
ff77
ff88
ff99
ffaa
ffbb
ffcc
ffdd
ffee
ffff