55 TagTree(uint32_t mynumleafsh, uint32_t mynumleafsv)
67 n = (uint64_t)nplh[numlvls] * nplv[numlvls];
68 nplh[numlvls + 1] = (uint32_t)(((uint64_t)nplh[numlvls] + 1) / 2);
69 nplv[numlvls + 1] = (uint32_t)(((uint64_t)nplv[numlvls] + 1) / 2);
76 GRK_WARN(
"tgt_create numnodes == 0, no tree created.");
77 throw std::runtime_error(
"tgt_create numnodes == 0, no tree created");
83 auto parent_node0 = parent_node;
85 for(int8_t i = 0; i < numlvls - 1; ++i)
87 for(uint32_t j = 0; j < nplv[i]; ++j)
92 node->parent = parent_node;
96 node->parent = parent_node;
101 if((j & 1) || j == nplv[i] - 1)
103 parent_node0 = parent_node;
107 parent_node = parent_node0;
108 parent_node0 += nplh[i];
122 return (std::numeric_limits<T>::max)();
129 for(uint64_t i = 0; i <
numnodes; ++i)
131 auto current_node =
nodes + i;
133 current_node->low = 0;
134 current_node->known =
false;
144 auto node =
nodes + leafno;
145 while(node && node->value > value)
162 auto node =
nodes + leafno;
176 while(low < threshold)
178 if(low >= node->value)
182 if(!bio->
write(1, 1))
188 if(!bio->
write(0, 1))
212 auto node =
nodes + leafno;
225 while(low < threshold && low < node->value)
231 node->value = T(low);
244 *value = node->value;
void read(uint32_t *bits, uint32_t n)
Read bits.
Definition: BitIO.cpp:114
bool write(uint32_t v, uint32_t n)
Write bits.
Definition: BitIO.cpp:103
Tag tree.
Definition: TagTree.h:47
uint64_t numnodes
Definition: TagTree.h:250
TagTree(uint32_t mynumleafsh, uint32_t mynumleafsv)
Create a tag tree.
Definition: TagTree.h:55
bool compress(BitIO *bio, uint64_t leafno, T threshold)
Encode the value of a leaf of the tag tree up to a given threshold.
Definition: TagTree.h:158
TagTreeNode< T > * nodes
Definition: TagTree.h:251
void reset()
Reset a tag tree (set all leaves to 0)
Definition: TagTree.h:127
void setvalue(uint64_t leafno, T value)
Set the value of a leaf of a tag tree.
Definition: TagTree.h:142
~TagTree()
Definition: TagTree.h:115
void decodeValue(BitIO *bio, uint64_t leafno, T threshold, T *value)
Decompress the value of a leaf of the tag tree up to a given threshold.
Definition: TagTree.h:207
uint32_t numleafsv
Definition: TagTree.h:249
constexpr T getUninitializedValue(void)
Definition: TagTree.h:120
uint32_t numleafsh
Definition: TagTree.h:248
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
void GRK_WARN(const char *fmt,...)
Definition: logger.cpp:49
TagTree< uint16_t > TagTreeU16
Definition: TagTree.h:255
TagTree< uint8_t > TagTreeU8
Definition: TagTree.h:254
Tag node.
Definition: TagTree.h:33
bool known
Definition: TagTree.h:39
T low
Definition: TagTree.h:38
TagTreeNode * parent
Definition: TagTree.h:36
TagTreeNode()
Definition: TagTree.h:34
T value
Definition: TagTree.h:37