StringBuf.hx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright (c) 2005, The haXe Project Contributors
  3. * All rights reserved.
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are met:
  6. *
  7. * - Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * - Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  15. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  16. * DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR
  17. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  18. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  19. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  20. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  21. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  22. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  23. * DAMAGE.
  24. */
  25. /**
  26. A String buffer is an efficient way to build a big string by
  27. appending small elements together.
  28. **/
  29. class StringBuf {
  30. /**
  31. Creates a new string buffer.
  32. **/
  33. public function new() {
  34. #if (js || cpp)
  35. b = new Array();
  36. #else
  37. b = "";
  38. #end
  39. }
  40. /**
  41. Adds the representation of any value to the string buffer.
  42. **/
  43. public inline function add( x : Dynamic ) {
  44. #if js
  45. b[b.length] = x == null ? 'null' : x;
  46. #elseif cpp
  47. b[b.length] = x;
  48. #else
  49. b += x;
  50. #end
  51. }
  52. /**
  53. Adds a part of a string to the string buffer.
  54. **/
  55. public inline function addSub( s : String, pos : Int, ?len : Int ) {
  56. #if flash9
  57. if( len == null )
  58. b += s.substr(pos);
  59. else
  60. b += s.substr(pos,len);
  61. #elseif (js || cpp)
  62. b[b.length] = s.substr(pos,len);
  63. #else
  64. b += s.substr(pos,len);
  65. #end
  66. }
  67. /**
  68. Adds a character to the string buffer.
  69. **/
  70. public inline function addChar( c : Int ) untyped {
  71. #if (js || cpp)
  72. b[b.length] = String.fromCharCode(c);
  73. #elseif (flash && !flash9)
  74. b += String["fromCharCode"](c);
  75. #else
  76. b += String.fromCharCode(c);
  77. #end
  78. }
  79. /**
  80. Returns the content of the string buffer.
  81. The buffer is not emptied by this operation.
  82. **/
  83. public inline function toString() : String {
  84. #if (js || cpp)
  85. return b.join("");
  86. #else
  87. return b;
  88. #end
  89. }
  90. private var b :
  91. #if (js || cpp)
  92. Array<Dynamic>
  93. #else
  94. String
  95. #end;
  96. }