OFFIS DCMTK  Version 3.6.0
lokuptbl.h
1 //
2 // (C) Jan de Vaan 2007-2010, all rights reserved. See the accompanying "License.txt" for licensed use.
3 //
4 
5 
6 #ifndef CHARLS_LOOKUPTABLE
7 #define CHARLS_LOOKUPTABLE
8 
9 // Tables for fast decoding of short Golomb Codes.
10 
11 struct Code
12 {
13  Code()
14  {
15  }
16 
17  Code(LONG value, LONG length) :
18  _value(value),
19  _length(length)
20  {
21  }
22 
23  LONG GetValue() const
24  { return _value; }
25  LONG GetLength() const
26  { return _length; }
27 
28  LONG _value;
29  LONG _length;
30 };
31 
32 
33 
34 class CTable
35 {
36 public:
37 
38  enum { cbit = 8 } ;
39 
40  CTable()
41  {
42  ::memset(rgtype, 0, sizeof(rgtype));
43  }
44 
45  void AddEntry(BYTE bvalue, Code c);
46 
47  inlinehint const Code& Get(LONG value)
48  { return rgtype[value]; }
49 private:
50  Code rgtype[1 << cbit];
51 };
52 
53 
54 //
55 // AddEntry
56 //
57 void CTable::AddEntry(BYTE bvalue, Code c)
58 {
59  LONG length = c.GetLength();
60  ASSERT(length <= cbit);
61 
62  for (LONG i = 0; i < LONG(1) << (cbit - length); ++i)
63  {
64  ASSERT(rgtype[(bvalue << (cbit - length)) + i].GetLength() == 0);
65  rgtype[(bvalue << (cbit - length)) + i] = c;
66  }
67 }
68 
69 #endif


Generated on Thu Dec 20 2012 for OFFIS DCMTK Version 3.6.0 by Doxygen 1.8.2