set.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. var RTL$ = {
  2. makeArray: function (/*dimensions, initializer*/){
  3. var forward = Array.prototype.slice.call(arguments);
  4. var result = new Array(forward.shift());
  5. var i;
  6. if (forward.length == 1){
  7. var init = forward[0];
  8. if (typeof init == "function")
  9. for(i = 0; i < result.length; ++i)
  10. result[i] = init();
  11. else
  12. for(i = 0; i < result.length; ++i)
  13. result[i] = init;
  14. }
  15. else
  16. for(i = 0; i < result.length; ++i)
  17. result[i] = this.makeArray.apply(this, forward);
  18. return result;
  19. },
  20. makeSet: function (/*...*/){
  21. var result = 0;
  22. function checkBit(b){
  23. if (b < 0 || b > 31)
  24. throw new Error("integes between 0 and 31 expected, got " + b);
  25. }
  26. function setBit(b){
  27. checkBit(b);
  28. result |= 1 << b;
  29. }
  30. for(var i = 0; i < arguments.length; ++i){
  31. var b = arguments[i];
  32. if (b instanceof Array){
  33. var from = b[0];
  34. var to = b[1];
  35. if (from < to)
  36. throw new Error("invalid SET diapason: " + from + ".." + to);
  37. for(var bi = from; bi <= to; ++bi)
  38. setBit(bi);
  39. }
  40. else
  41. setBit(b);
  42. }
  43. return result;
  44. },
  45. setInclL: function (l, r){return (l & r) == l;},
  46. setInclR: function (l, r){return (l & r) == r;}
  47. };
  48. var m = function (){
  49. var ci = 3;
  50. var cb = true;
  51. var cs1 = 2 | 4;
  52. var cs2 = 14 & ~18;
  53. var cs3 = 14 & 18;
  54. var cs4 = 14 ^ 18;
  55. var cs5 = ~2;
  56. var s1 = 0;var s2 = 0;
  57. var i1 = 0;
  58. var b = false;
  59. var aSet = RTL$.makeArray(1, 0);
  60. var aInt = RTL$.makeArray(1, 0);
  61. function getSet1(){
  62. return 2;
  63. }
  64. function getSet2(){
  65. return 4;
  66. }
  67. s1 = 0;
  68. s1 = 61;
  69. s1 = 8;
  70. s1 = 64;
  71. i1 = 3;
  72. s2 = RTL$.makeSet(i1, i1 + 2 | 0, [10 - i1 | 0, 15]);
  73. s2 = RTL$.makeSet(i1) | 4;
  74. b = 1 << i1 & s1;
  75. b = RTL$.setInclL(s1, s2);
  76. b = RTL$.setInclR(s1, s2);
  77. b = RTL$.setInclL(getSet1(), getSet2());
  78. b = RTL$.setInclR(getSet1(), getSet2());
  79. b = RTL$.setInclL(cs1, cs2);
  80. b = RTL$.setInclR(cs1, cs2);
  81. b = RTL$.setInclL(cs1 | cs2, cs1 | cs2);
  82. b = RTL$.setInclR(cs1 | cs2, cs2 | cs1);
  83. b = RTL$.setInclL(2 | 4, 2 | 4);
  84. b = RTL$.setInclR(2 | 4, 4 | 2);
  85. b = s1 == s2;
  86. b = s1 != s2;
  87. s1 = s1 | s2;
  88. s1 = s1 & ~s2;
  89. s1 = s1 & s2;
  90. s1 = s1 ^ s2;
  91. s1 = ~s2;
  92. s2 |= 8/*bit: 3*/;
  93. s1 |= 512/*bit: ((ci * 2 | 0) + 3 | 0)*/;
  94. s1 |= 2/*bit: (cb ? 1 : 0)*/;
  95. aSet[0] |= 8/*bit: 3*/;
  96. s2 &= ~(8/*bit: 3*/);
  97. s2 &= ~(1/*bit: (!cb ? 1 : 0)*/);
  98. aSet[0] &= ~(8/*bit: 3*/);
  99. }();