Guest User

Untitled

a guest
Apr 22nd, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.72 KB | None | 0 0
  1. package com.jcraft.jogg;
  2.  
  3. import java.io.PrintStream;
  4.  
  5. public class Buffer
  6. {
  7.  
  8. public Buffer()
  9. {
  10. ptr = 0;
  11. buffer = null;
  12. endbit = 0;
  13. endbyte = 0;
  14. storage = 0;
  15. }
  16.  
  17. public void writeinit()
  18. {
  19. buffer = new byte[256];
  20. ptr = 0;
  21. buffer[0] = 0;
  22. storage = 256;
  23. }
  24.  
  25. public void write(byte abyte0[])
  26. {
  27. for(int i = 0; i < abyte0.length && abyte0[i] != 0; i++)
  28. write(abyte0[i], 8);
  29.  
  30. }
  31.  
  32. public void read(byte abyte0[], int i)
  33. {
  34. int j = 0;
  35. while(i-- != 0)
  36. abyte0[j++] = (byte)read(8);
  37. }
  38.  
  39. void reset()
  40. {
  41. ptr = 0;
  42. buffer[0] = 0;
  43. endbit = endbyte = 0;
  44. }
  45.  
  46. public void writeclear()
  47. {
  48. buffer = null;
  49. }
  50.  
  51. public void readinit(byte abyte0[], int i)
  52. {
  53. readinit(abyte0, 0, i);
  54. }
  55.  
  56. public void readinit(byte abyte0[], int i, int j)
  57. {
  58. ptr = i;
  59. buffer = abyte0;
  60. endbit = endbyte = 0;
  61. storage = j;
  62. }
  63.  
  64. public void write(int i, int j)
  65. {
  66. if(endbyte + 4 >= storage)
  67. {
  68. byte abyte0[] = new byte[storage + 256];
  69. System.arraycopy(buffer, 0, abyte0, 0, storage);
  70. buffer = abyte0;
  71. storage += 256;
  72. }
  73. i &= mask[j];
  74. j += endbit;
  75. buffer[ptr] |= (byte)(i << endbit);
  76. if(j >= 8)
  77. {
  78. buffer[ptr + 1] = (byte)(i >>> 8 - endbit);
  79. if(j >= 16)
  80. {
  81. buffer[ptr + 2] = (byte)(i >>> 16 - endbit);
  82. if(j >= 24)
  83. {
  84. buffer[ptr + 3] = (byte)(i >>> 24 - endbit);
  85. if(j >= 32)
  86. if(endbit > 0)
  87. buffer[ptr + 4] = (byte)(i >>> 32 - endbit);
  88. else
  89. buffer[ptr + 4] = 0;
  90. }
  91. }
  92. }
  93. endbyte += j / 8;
  94. ptr += j / 8;
  95. endbit = j & 7;
  96. }
  97.  
  98. public int look(int i)
  99. {
  100. int k = mask[i];
  101. i += endbit;
  102. if(endbyte + 4 >= storage && endbyte + (i - 1) / 8 >= storage)
  103. return -1;
  104. int j = (buffer[ptr] & 0xff) >>> endbit;
  105. if(i > 8)
  106. {
  107. j |= (buffer[ptr + 1] & 0xff) << 8 - endbit;
  108. if(i > 16)
  109. {
  110. j |= (buffer[ptr + 2] & 0xff) << 16 - endbit;
  111. if(i > 24)
  112. {
  113. j |= (buffer[ptr + 3] & 0xff) << 24 - endbit;
  114. if(i > 32 && endbit != 0)
  115. j |= (buffer[ptr + 4] & 0xff) << 32 - endbit;
  116. }
  117. }
  118. }
  119. return k & j;
  120. }
  121.  
  122. public int look1()
  123. {
  124. if(endbyte >= storage)
  125. return -1;
  126. else
  127. return buffer[ptr] >> endbit & 1;
  128. }
  129.  
  130. public void adv(int i)
  131. {
  132. i += endbit;
  133. ptr += i / 8;
  134. endbyte += i / 8;
  135. endbit = i & 7;
  136. }
  137.  
  138. public void adv1()
  139. {
  140. endbit++;
  141. if(endbit > 7)
  142. {
  143. endbit = 0;
  144. ptr++;
  145. endbyte++;
  146. }
  147. }
  148.  
  149. public int read(int i)
  150. {
  151. int k = mask[i];
  152. i += endbit;
  153. if(endbyte + 4 >= storage)
  154. {
  155. byte byte0 = -1;
  156. if(endbyte + (i - 1) / 8 >= storage)
  157. {
  158. ptr += i / 8;
  159. endbyte += i / 8;
  160. endbit = i & 7;
  161. return byte0;
  162. }
  163. }
  164. int j = (buffer[ptr] & 0xff) >>> endbit;
  165. if(i > 8)
  166. {
  167. j |= (buffer[ptr + 1] & 0xff) << 8 - endbit;
  168. if(i > 16)
  169. {
  170. j |= (buffer[ptr + 2] & 0xff) << 16 - endbit;
  171. if(i > 24)
  172. {
  173. j |= (buffer[ptr + 3] & 0xff) << 24 - endbit;
  174. if(i > 32 && endbit != 0)
  175. j |= (buffer[ptr + 4] & 0xff) << 32 - endbit;
  176. }
  177. }
  178. }
  179. j &= k;
  180. ptr += i / 8;
  181. endbyte += i / 8;
  182. endbit = i & 7;
  183. return j;
  184. }
  185.  
  186. public int readB(int i)
  187. {
  188. int k = 32 - i;
  189. i += endbit;
  190. if(endbyte + 4 >= storage)
  191. {
  192. byte byte0 = -1;
  193. if(endbyte * 8 + i > storage * 8)
  194. {
  195. ptr += i / 8;
  196. endbyte += i / 8;
  197. endbit = i & 7;
  198. return byte0;
  199. }
  200. }
  201. int j = (buffer[ptr] & 0xff) << 24 + endbit;
  202. if(i > 8)
  203. {
  204. j |= (buffer[ptr + 1] & 0xff) << 16 + endbit;
  205. if(i > 16)
  206. {
  207. j |= (buffer[ptr + 2] & 0xff) << 8 + endbit;
  208. if(i > 24)
  209. {
  210. j |= (buffer[ptr + 3] & 0xff) << endbit;
  211. if(i > 32 && endbit != 0)
  212. j |= (buffer[ptr + 4] & 0xff) >> 8 - endbit;
  213. }
  214. }
  215. }
  216. j = j >>> (k >> 1) >>> (k + 1 >> 1);
  217. ptr += i / 8;
  218. endbyte += i / 8;
  219. endbit = i & 7;
  220. return j;
  221. }
  222.  
  223. public int read1()
  224. {
  225. if(endbyte >= storage)
  226. {
  227. byte byte0 = -1;
  228. endbit++;
  229. if(endbit > 7)
  230. {
  231. endbit = 0;
  232. ptr++;
  233. endbyte++;
  234. }
  235. return byte0;
  236. }
  237. int i = buffer[ptr] >> endbit & 1;
  238. endbit++;
  239. if(endbit > 7)
  240. {
  241. endbit = 0;
  242. ptr++;
  243. endbyte++;
  244. }
  245. return i;
  246. }
  247.  
  248. public int bytes()
  249. {
  250. return endbyte + (endbit + 7) / 8;
  251. }
  252.  
  253. public int bits()
  254. {
  255. return endbyte * 8 + endbit;
  256. }
  257.  
  258. public byte[] buffer()
  259. {
  260. return buffer;
  261. }
  262.  
  263. public static int ilog(int i)
  264. {
  265. int j = 0;
  266. for(; i > 0; i >>>= 1)
  267. j++;
  268.  
  269. return j;
  270. }
  271.  
  272. public static void report(String s)
  273. {
  274. System.err.println(s);
  275. System.exit(1);
  276. }
  277.  
  278. private static final int BUFFER_INCREMENT = 256;
  279. private static final int mask[] = {
  280. 0, 1, 3, 7, 15, 31, 63, 127, 255, 511,
  281. 1023, 2047, 4095, 8191, 16383, 32767, 65535, 0x1ffff, 0x3ffff, 0x7ffff,
  282. 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff,
  283. 0x3fffffff, 0x7fffffff, -1
  284. };
  285. int ptr;
  286. byte buffer[];
  287. int endbit;
  288. int endbyte;
  289. int storage;
  290.  
  291. }
Add Comment
Please, Sign In to add comment