string.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var RTL$ = {
  2. makeCharArray: function (/*dimensions*/){
  3. var forward = Array.prototype.slice.call(arguments);
  4. var length = forward.pop();
  5. if (!forward.length)
  6. return makeCharArray(length);
  7. function makeCharArray(length){
  8. var result = new Uint16Array(length);
  9. result.charCodeAt = function(i){return this[i];};
  10. return result;
  11. }
  12. function makeArray(){
  13. var forward = Array.prototype.slice.call(arguments);
  14. var result = new Array(forward.shift());
  15. var i;
  16. if (forward.length == 1){
  17. var init = forward[0];
  18. for(i = 0; i < result.length; ++i)
  19. result[i] = init();
  20. }
  21. else
  22. for(i = 0; i < result.length; ++i)
  23. result[i] = makeArray.apply(undefined, forward);
  24. return result;
  25. }
  26. forward.push(makeCharArray.bind(undefined, length));
  27. return makeArray.apply(undefined, forward);
  28. },
  29. assignArrayFromString: function (a, s){
  30. var i;
  31. for(i = 0; i < s.length; ++i)
  32. a[i] = s.charCodeAt(i);
  33. for(i = s.length; i < a.length; ++i)
  34. a[i] = 0;
  35. },
  36. assert: function (condition){
  37. if (!condition)
  38. throw new Error("assertion failed");
  39. },
  40. strCmp: function (s1, s2){
  41. var cmp = 0;
  42. var i = 0;
  43. while (!cmp && i < s1.length && i < s2.length){
  44. cmp = s1.charCodeAt(i) - s2.charCodeAt(i);
  45. ++i;
  46. }
  47. return cmp ? cmp : s1.length - s2.length;
  48. }
  49. };
  50. var m = function (){
  51. var s1 = "\"";
  52. var s2 = "ABC";
  53. var s3 = "with space";
  54. var s4 = "\n";
  55. var s5 = "\r";
  56. var s6 = "\b";
  57. var s7 = "\t";
  58. var s8 = "\f";
  59. var s9 = "\\";
  60. var ch1 = 0;
  61. var a1 = RTL$.makeCharArray(15);
  62. var a2 = RTL$.makeCharArray(3);
  63. var i = 0;
  64. function p1(s/*ARRAY OF CHAR*/){
  65. }
  66. function p2(c/*CHAR*/){
  67. }
  68. ch1 = 34;
  69. RTL$.assignArrayFromString(a1, s1);
  70. RTL$.assignArrayFromString(a2, s2);
  71. RTL$.assignArrayFromString(a1, s2);
  72. p1(s1);
  73. p1(s2);
  74. p2(34);
  75. p2(a1.charCodeAt(0));
  76. RTL$.assert(ch1 == 34);
  77. RTL$.assert(34 == ch1);
  78. RTL$.assert(RTL$.strCmp("abc", "abc") == 0);
  79. RTL$.assert(RTL$.strCmp(a1, a2) == 0);
  80. RTL$.assert(RTL$.strCmp(a1, a2) != 0);
  81. RTL$.assert(RTL$.strCmp(a1, a2) > 0);
  82. RTL$.assert(RTL$.strCmp(a1, s1) > 0);
  83. RTL$.assert(RTL$.strCmp(a1, s1) >= 0);
  84. RTL$.assert(RTL$.strCmp(a1, s1) != 0);
  85. RTL$.assert(RTL$.strCmp(s1, a1) < 0);
  86. RTL$.assert(RTL$.strCmp(s1, a1) <= 0);
  87. RTL$.assert(RTL$.strCmp(s1, a1) != 0);
  88. a1[0] = 97;
  89. a1[1] = a1.charCodeAt(0);
  90. RTL$.assert(s1.charCodeAt(0) == 34);
  91. RTL$.assert(s2.charCodeAt(0) == 65);
  92. p2(s2.charCodeAt(0));
  93. p2(s2.charCodeAt(i));
  94. }();