string.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. function p1(s/*ARRAY OF CHAR*/){
  64. }
  65. function p2(c/*CHAR*/){
  66. }
  67. ch1 = 34;
  68. RTL$.assignArrayFromString(a1, s1);
  69. RTL$.assignArrayFromString(a2, s2);
  70. RTL$.assignArrayFromString(a1, s2);
  71. p1(s1);
  72. p1(s2);
  73. p2(34);
  74. p2(a1.charCodeAt(0));
  75. RTL$.assert(ch1 == 34);
  76. RTL$.assert(34 == ch1);
  77. RTL$.assert(RTL$.strCmp("abc", "abc") == 0);
  78. RTL$.assert(RTL$.strCmp(a1, a2) == 0);
  79. RTL$.assert(RTL$.strCmp(a1, a2) != 0);
  80. RTL$.assert(RTL$.strCmp(a1, a2) > 0);
  81. RTL$.assert(RTL$.strCmp(a1, s1) > 0);
  82. RTL$.assert(RTL$.strCmp(a1, s1) >= 0);
  83. RTL$.assert(RTL$.strCmp(a1, s1) != 0);
  84. RTL$.assert(RTL$.strCmp(s1, a1) < 0);
  85. RTL$.assert(RTL$.strCmp(s1, a1) <= 0);
  86. RTL$.assert(RTL$.strCmp(s1, a1) != 0);
  87. a1[0] = 97;
  88. a1[1] = a1.charCodeAt(0);
  89. }();