source: trunk/mgpp/lib/bitio_m_mem.cpp@ 9612

Last change on this file since 9612 was 9612, checked in by kjdon, 19 years ago

added in x++ -> ++x changes submitted by Emanuel Dejanu

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.1 KB
Line 
1#include <stdlib.h>
2#include <stdio.h>
3
4#include "bitio_m_abstract.h"
5#include "bitio_m_mem.h"
6
7mem_bitio_buffer::mem_bitio_buffer() {
8}
9
10mem_bitio_buffer::mem_bitio_buffer(unsigned char *readbuffer, int size) {
11 pos = readbuffer;
12 base = readbuffer;
13 remaining = size;
14 buffer = 0;
15 btg = 0;
16}
17
18
19void mem_bitio_buffer::error() {
20 fprintf (stderr, "Unexpected EOF in \"%s\" on line %d\n", __FILE__, __LINE__);
21 exit(1);
22}
23
24void mem_bitio_buffer::encodeStart() {
25 btg = sizeof(buffer) * 8;
26}
27
28
29void mem_bitio_buffer::seek(unsigned long toPos) {
30 register long _newPos;
31 do {
32 _newPos = toPos;
33
34 pos = base + (_newPos >> 3);
35 buffer = *pos++;
36 btg = 8 - (_newPos & 0x07);
37 } while (0);
38}
39
40long mem_bitio_buffer::addff(long b) {
41 do {
42 if (btg == 0) {
43 if (remaining != 0) {
44 buffer = *pos++;
45 --remaining;
46 } else {
47 buffer = 0xff;
48 }
49 btg = sizeof(buffer) * 8;
50 }
51 b = b + b + ((buffer >> --btg) & 1);
52 } while(0);
53
54 return b;
55}
56
57long mem_bitio_buffer::add00(long b) {
58 do {
59 if (btg == 0) {
60 if (remaining != 0) {
61 buffer = *pos++;
62 --remaining;
63 } else {
64 buffer = 0x00;
65 }
66 btg = sizeof(buffer) * 8;
67 }
68 b = b + b + ((buffer >> --btg) & 1);
69 } while(0);
70
71 return b;
72}
73
74int mem_bitio_buffer::bit() {
75 if (btg == 0) {
76
77 if (remaining == 0) {
78 this->error();
79 return 0;
80
81 } else {
82 buffer = *pos++;
83 --remaining;
84 btg = sizeof(buffer) * 8;
85 }
86
87 }
88 return ((buffer >> --btg) & 0x01);
89}
90
91void mem_bitio_buffer::encodeBit(int b) {
92 --btg;
93 if (b) buffer |= (1 << btg);
94
95 if (btg == 0) {
96 if (remaining) {
97 *pos++ = buffer;
98 --remaining;
99 }
100 buffer = 0;
101 btg = sizeof(buffer)*8;
102 }
103}
104
105void mem_bitio_buffer::flush() {
106 if (btg != sizeof(buffer)*8) {
107 if (remaining) {
108 *pos++ = buffer;
109 --remaining;
110 }
111 }
112 btg = sizeof(buffer)*8;
113}
114
115void mem_bitio_buffer::done() {
116 // do nothing
117}
118
119int mem_bitio_buffer::encodeLength() {
120 return pos - base;
121}
122
123int mem_bitio_buffer::encodeVerify() {
124 return (remaining != 0);
125}
126
127
128
Note: See TracBrowser for help on using the repository browser.