huffmancode to decode in real-time for motion-jpeg
Dependents: BaseJpegDecode_example SimpleJpegDecode_example Dumb_box_rev2
BitPattern.cpp
00001 #include "BitPattern.h" 00002 00003 BitPattern::BitPattern() 00004 { 00005 clear(); 00006 } 00007 00008 BitPattern::BitPattern(uint32_t value, int size) 00009 { 00010 clear(); 00011 put(value, size); 00012 } 00013 00014 BitPattern::BitPattern(const char* s) 00015 { 00016 clear(); 00017 operator+=(s); 00018 } 00019 00020 void BitPattern::clear() 00021 { 00022 m_size = 0; 00023 m_pat = 0; 00024 } 00025 00026 void BitPattern::operator=(const char* s) 00027 { 00028 clear(); 00029 operator+=(s); 00030 } 00031 00032 void BitPattern::operator+=(uint8_t c) 00033 { 00034 put(c); 00035 } 00036 00037 void BitPattern::operator+=(const char* s) 00038 { 00039 for(int i = 0; i < 32 && s[i]; i++) { 00040 char c = s[i]; 00041 put(c-'0', 1); 00042 } 00043 } 00044 00045 int BitPattern::operator [](int index) 00046 { 00047 uint32_t mask = 0x80000000; 00048 for(int i = 0; i < index; i++) { 00049 mask>>=1; 00050 } 00051 if (m_pat & mask) { 00052 return 1; 00053 } 00054 return 0; 00055 } 00056 00057 void BitPattern::put(uint32_t value, int size) 00058 { 00059 m_pat <<= size; 00060 m_pat |= value; 00061 m_size += size; 00062 } 00063 00064 uint32_t BitPattern::peek(int size) 00065 { 00066 return m_pat >> (m_size - size); 00067 } 00068 00069 uint32_t BitPattern::get(int size) 00070 { 00071 uint32_t r = peek(size); 00072 m_size -= size; 00073 m_pat &= (1<<m_size)-1; 00074 return r; 00075 } 00076 00077 int BitPattern::size() 00078 { 00079 return m_size; 00080 } 00081 00082 bool BitPattern::match(BitPattern& b) 00083 { 00084 if (b.m_size > m_size) { 00085 return false; 00086 } 00087 return peek(b.size()) == b.peek(b.size()); 00088 } 00089 00090 bool BitPattern::match(const char* s) 00091 { 00092 BitPattern a = s; 00093 return match(a); 00094 } 00095 00096 bool BitPattern::operator ==(BitPattern& b) 00097 { 00098 if (b.m_size == m_size) { 00099 if (b.m_pat == m_pat) { 00100 return true; 00101 } 00102 } 00103 return false; 00104 }
Generated on Thu Jul 14 2022 18:10:56 by 1.7.2