huffmancode to decode in real-time for motion-jpeg

Dependents:   BaseJpegDecode_example SimpleJpegDecode_example Dumb_box_rev2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BitPattern.cpp Source File

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 }