PageRenderTime 42ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/haxe/org/xiph/fogg/Buffer.hx

http://github.com/TooTallNate/SoundJS
Haxe | 366 lines | 259 code | 35 blank | 72 comment | 45 complexity | 61a440dbe42b6cc2d98729b06fc4fb30 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-3.0
  1. package org.xiph.fogg;
  2. import org.xiph.system.Bytes;
  3. import flash.Vector;
  4. class Buffer {
  5. /*
  6. * generated source for Buffer
  7. */
  8. inline static private var BUFFER_INCREMENT : Int = 256;
  9. inline static private var _mask : Array<Int> =
  10. [0x00000000, 0x00000001, 0x00000003, 0x00000007,
  11. 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
  12. 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
  13. 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
  14. 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
  15. 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
  16. 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
  17. 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
  18. 0xffffffff];
  19. static private var _vmask : Vector<Int> = null;
  20. private var mask : Vector<Int>;
  21. // discarded initializer: '0';
  22. var ptr : Int;
  23. // discarded initializer: 'null';
  24. public var buffer : Bytes;
  25. // discarded initializer: '0';
  26. var endbit : Int;
  27. // discarded initializer: '0';
  28. var endbyte : Int;
  29. // discarded initializer: '0';
  30. var storage : Int;
  31. // modifiers: public
  32. public function writeinit() : Void {
  33. buffer = System.alloc(Buffer.BUFFER_INCREMENT);
  34. ptr = 0;
  35. buffer[0] = 0;
  36. storage = Buffer.BUFFER_INCREMENT;
  37. }
  38. // modifiers: public
  39. public function writeBytes(s : Bytes) : Void {
  40. // for-while;
  41. var i : Int = 0;
  42. while (i < s.length) {
  43. if (s[i] == 0) {
  44. break;
  45. };
  46. write(s[i], 8);
  47. i++;
  48. };
  49. }
  50. // modifiers: public
  51. public function readBytes(s : Bytes, bytes : Int) : Void {
  52. var i : Int = 0;
  53. while (bytes-- != 0) {
  54. s[i++] = read(8);
  55. };
  56. }
  57. // modifiers:
  58. function reset() : Void {
  59. ptr = 0;
  60. buffer[0] = 0;
  61. endbit = endbyte = 0;
  62. }
  63. // modifiers: public
  64. public function writeclear() : Void {
  65. buffer = null;
  66. }
  67. /*
  68. // modifiers: public
  69. public function __readinit_0(buf : Bytes, bytes : Int) : Void {
  70. __readinit_1(buf, 0, bytes);
  71. }
  72. */
  73. // modifiers: public
  74. public function readinit(buf : Bytes, start : Int = 0, bytes : Int) : Void {
  75. ptr = start;
  76. buffer = buf;
  77. endbit = endbyte = 0;
  78. storage = bytes;
  79. }
  80. // modifiers: public
  81. public function write(value : Int, bits : Int) : Void {
  82. if ((endbyte + 4) >= storage) {
  83. // var foo : Bytes = System.alloc(storage + Buffer.BUFFER_INCREMENT);
  84. // System.arraycopy(buffer, 0, foo, 0, storage);
  85. // buffer = foo;
  86. storage += Buffer.BUFFER_INCREMENT;
  87. buffer.length = storage;
  88. };
  89. value &= mask[bits];
  90. bits += endbit;
  91. buffer[ptr] |= value << endbit;
  92. if (bits >= 8) {
  93. buffer[ptr + 1] = value >>> (8 - endbit);
  94. if (bits >= 16) {
  95. buffer[ptr + 2] = value >>> (16 - endbit);
  96. if (bits >= 24) {
  97. buffer[ptr + 3] = value >>> (24 - endbit);
  98. if (bits >= 32) {
  99. if (endbit > 0) {
  100. buffer[ptr + 4] = value >>> (32 - endbit);
  101. }
  102. else {
  103. buffer[ptr + 4] = 0;
  104. };
  105. };
  106. };
  107. };
  108. };
  109. endbyte += Std.int(bits / 8);
  110. ptr += Std.int(bits / 8);
  111. endbit = bits & 7;
  112. }
  113. // modifiers: public
  114. public function look(bits : Int) : Int {
  115. var ret : Int;
  116. var m : Int = mask[bits];
  117. bits += endbit;
  118. if ((endbyte + 4) >= storage) {
  119. if ((endbyte + ((bits - 1) / 8)) >= storage) {
  120. return -1;
  121. };
  122. };
  123. ret = ((buffer[ptr] & 0xff) >>> endbit);
  124. if (bits > 8) {
  125. ret |= ((buffer[ptr + 1] & 0xff) << (8 - endbit));
  126. if (bits > 16) {
  127. ret |= ((buffer[ptr + 2] & 0xff) << (16 - endbit));
  128. if (bits > 24) {
  129. ret |= ((buffer[ptr + 3] & 0xff) << (24 - endbit));
  130. if ((bits > 32) && (endbit != 0)) {
  131. ret |= ((buffer[ptr + 4] & 0xff) << (32 - endbit));
  132. };
  133. };
  134. };
  135. };
  136. return m & ret;
  137. }
  138. // modifiers: public
  139. public function look1() : Int {
  140. if (endbyte >= storage) {
  141. return -1;
  142. };
  143. return (buffer[ptr] >> endbit) & 1;
  144. }
  145. // modifiers: public
  146. public function adv(bits : Int) : Void {
  147. bits += endbit;
  148. ptr += Std.int(bits / 8);
  149. endbyte += Std.int(bits / 8);
  150. endbit = bits & 7;
  151. }
  152. // modifiers: public
  153. public function adv1() : Void {
  154. ++endbit;
  155. if (endbit > 7) {
  156. endbit = 0;
  157. ptr++;
  158. endbyte++;
  159. };
  160. }
  161. // modifiers: public
  162. public function read(bits : Int) : Int {
  163. var ret : Int;
  164. var m : Int = mask[bits];
  165. bits += endbit;
  166. if ((endbyte + 4) >= storage) {
  167. ret = -1;
  168. if ((endbyte + ((bits - 1) / 8)) >= storage) {
  169. ptr += Std.int(bits / 8);
  170. endbyte += Std.int(bits / 8);
  171. endbit = (bits & 7);
  172. return ret;
  173. };
  174. };
  175. ret = ((buffer[ptr] & 0xff) >>> endbit);
  176. if (bits > 8) {
  177. ret |= ((buffer[ptr + 1] & 0xff) << (8 - endbit));
  178. if (bits > 16) {
  179. ret |= ((buffer[ptr + 2] & 0xff) << (16 - endbit));
  180. if (bits > 24) {
  181. ret |= ((buffer[ptr + 3] & 0xff) << (24 - endbit));
  182. if ((bits > 32) && (endbit != 0)) {
  183. ret |= ((buffer[ptr + 4] & 0xff) << (32 - endbit));
  184. };
  185. };
  186. };
  187. };
  188. ret &= m;
  189. ptr += Std.int(bits / 8);
  190. endbyte += Std.int(bits / 8);
  191. endbit = bits & 7;
  192. return ret;
  193. }
  194. // modifiers: public
  195. public function readB(bits : Int) : Int {
  196. var ret : Int;
  197. var m : Int = 32 - bits;
  198. bits += endbit;
  199. if ((endbyte + 4) >= storage) {
  200. ret = -1;
  201. if (((endbyte * 8) + bits) > (storage * 8)) {
  202. ptr += Std.int(bits / 8);
  203. endbyte += Std.int(bits / 8);
  204. endbit = (bits & 7);
  205. return ret;
  206. };
  207. };
  208. ret = ((buffer[ptr] & 0xff) << (24 + endbit));
  209. if (bits > 8) {
  210. ret |= ((buffer[ptr + 1] & 0xff) << (16 + endbit));
  211. if (bits > 16) {
  212. ret |= ((buffer[ptr + 2] & 0xff) << (8 + endbit));
  213. if (bits > 24) {
  214. ret |= ((buffer[ptr + 3] & 0xff) << endbit);
  215. if ((bits > 32) && (endbit != 0)) {
  216. ret |= ((buffer[ptr + 4] & 0xff) >> (8 - endbit));
  217. };
  218. };
  219. };
  220. };
  221. ret = ((ret >>> (m >> 1)) >>> ((m + 1) >> 1));
  222. ptr += Std.int(bits / 8);
  223. endbyte += Std.int(bits / 8);
  224. endbit = (bits & 7);
  225. return ret;
  226. }
  227. // modifiers: public
  228. public function read1() : Int {
  229. var ret : Int;
  230. if (endbyte >= storage) {
  231. ret = -1;
  232. endbit++;
  233. if (endbit > 7) {
  234. endbit = 0;
  235. ptr++;
  236. endbyte++;
  237. };
  238. return ret;
  239. };
  240. ret = ((buffer[ptr] >> endbit) & 1);
  241. endbit++;
  242. if (endbit > 7) {
  243. endbit = 0;
  244. ptr++;
  245. endbyte++;
  246. };
  247. return ret;
  248. }
  249. // modifiers: public
  250. public function bytes() : Int {
  251. return endbyte + Std.int((endbit + 7) / 8);
  252. }
  253. // modifiers: public
  254. public function bits() : Int {
  255. return (endbyte * 8) + endbit;
  256. }
  257. // modifiers: public
  258. public function buffer_() : Bytes {
  259. // FIXME: shadows variable 'buffer';
  260. return buffer;
  261. }
  262. // modifiers: static,public
  263. static public function ilog(v : Int) : Int {
  264. var ret : Int = 0;
  265. while (v > 0) {
  266. ret++;
  267. v >>>= 1;
  268. };
  269. return ret;
  270. }
  271. // modifiers: static,public
  272. static public function report(in_ : String) : Void {
  273. //System.err.println(in_);
  274. trace(in_);
  275. //System.exit(1);
  276. }
  277. /*
  278. // modifiers: inline,public
  279. inline public function read() : Void {
  280. // FIXME: implement disambiguation handler;
  281. // __read_0(s : Bytes, bytes : Int) : Void;
  282. // __read_1(bits : Int) : Int;
  283. throw "NotImplementedError";
  284. }
  285. */
  286. /*
  287. // modifiers: inline,public
  288. inline public function readinit() : Void {
  289. // FIXME: implement disambiguation handler;
  290. // __readinit_0(buf : Bytes, bytes : Int) : Void;
  291. // __readinit_1(buf : Bytes, start : Int, bytes : Int) : Void;
  292. throw "NotImplementedError";
  293. }
  294. */
  295. /*
  296. // modifiers: inline,public
  297. inline public function write() : Void {
  298. // FIXME: implement disambiguation handler;
  299. // __write_0(s : Bytes) : Void;
  300. // __write_1(value : Int, bits : Int) : Void;
  301. throw "NotImplementedError";
  302. }
  303. */
  304. public function new() {
  305. mask = Buffer._vmask;
  306. ptr = 0;
  307. buffer = null;
  308. endbit = 0;
  309. endbyte = 0;
  310. storage = 0;
  311. }
  312. private static function __static_init__() : Void {
  313. var i : Int = 0;
  314. var n : Int = Buffer._mask.length;
  315. Buffer._vmask = new Vector(n, true);
  316. while (i < n) {
  317. Buffer._vmask[i] = Buffer._mask[i];
  318. i++;
  319. }
  320. }
  321. public static function _s_init() : Void {
  322. if (Buffer._vmask == null) {
  323. __static_init__();
  324. }
  325. }
  326. /*
  327. private static function __init__() : Void {
  328. //__static_init__();
  329. }
  330. */
  331. }