summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/entropy_encoder_model
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/entropy_encoder_model')
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_1.h167
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_2.h246
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_3.h341
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_4.h553
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_5.h817
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_6.h127
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_abstract.h118
-rw-r--r--ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_c.h65
8 files changed, 0 insertions, 2434 deletions
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_1.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_1.h
deleted file mode 100644
index 29c82e5be..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_1.h
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright (C) 2004 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_1_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_1_
-
-#include "../algs.h"
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../assert.h"
-
-namespace dlib
-{
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc
- >
- class entropy_encoder_model_kernel_1
- {
- /*!
- REQUIREMENTS ON cc
- cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h
- cc::get_alphabet_size() == alphabet_size+1
-
- INITIAL VALUE
- Initially this object's finite context model is empty
-
- CONVENTION
- &get_entropy_encoder() == coder
- &order_0.get_global_state() == &gs
-
- This is an order-0 model. The last symbol in the order-0 context is
- an escape into the order minus 1 context.
- !*/
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model_kernel_1 (
- entropy_encoder& coder
- );
-
- virtual ~entropy_encoder_model_kernel_1 (
- );
-
- inline void clear(
- );
-
- inline void encode (
- unsigned long symbol
- );
-
- entropy_encoder& get_entropy_encoder (
- ) { return coder; }
-
- static unsigned long get_alphabet_size (
- ) { return alphabet_size; }
-
- private:
-
- entropy_encoder& coder;
- typename cc::global_state_type gs;
- cc order_0;
-
- // restricted functions
- entropy_encoder_model_kernel_1(entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>&); // copy constructor
- entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>& operator=(entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc
- >
- entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::
- entropy_encoder_model_kernel_1 (
- entropy_encoder& coder_
- ) :
- coder(coder_),
- order_0(gs)
- {
- COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc
- >
- entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::
- ~entropy_encoder_model_kernel_1 (
- )
- {
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc
- >
- void entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::
- clear(
- )
- {
- order_0.clear();
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc
- >
- void entropy_encoder_model_kernel_1<alphabet_size,entropy_encoder,cc>::
- encode (
- unsigned long symbol
- )
- {
- unsigned long low_count = 0, high_count = 0, total_count = 0;
-
- // if we have seen this symbol in the order-0 context
- if (order_0.get_range(symbol,low_count,high_count,total_count))
- {
- // update the count for this symbol
- order_0.increment_count(symbol,2);
- // encode this symbol
- coder.encode(low_count,high_count,total_count);
- return;
- }
-
- // if we are here then the symbol does not appear in the order-0 context
-
-
- // since we have never seen the current symbol in this context
- // escape from order-0 context
- order_0.get_range(alphabet_size,low_count,high_count,total_count);
- coder.encode(low_count,high_count,total_count);
- // increment the count for the escape symbol
- order_0.increment_count(alphabet_size);
-
- // update the count for this symbol
- order_0.increment_count(symbol,2);
-
- // use order minus one context
- coder.encode(symbol,symbol+1,alphabet_size);
-
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_1_
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_2.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_2.h
deleted file mode 100644
index 08a16cae0..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_2.h
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright (C) 2004 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_2_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_2_
-
-#include "../algs.h"
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../assert.h"
-
-namespace dlib
-{
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename ccbig
- >
- class entropy_encoder_model_kernel_2
- {
- /*!
- REQUIREMENTS ON cc
- cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h
- cc::get_alphabet_size() == alphabet_size+1
- this will be used for the order-0 context
-
- REQUIREMENTS ON ccbig
- ccbig is an implementation of conditioning_class/conditioning_class_kernel_abstract.h
- ccbig::get_alphabet_size() == alphabet_size+1
- this will be used for the order-1 context
-
- INITIAL VALUE
- Initially this object's finite context model is empty
- previous_symbol == 0
-
- CONVENTION
- &get_entropy_encoder() == coder
- &order_0.get_global_state() == &gs
- &order_1[i]->get_global_state() == &gsbig
-
-
- This is an order-1-0 model. The last symbol in the order-0 and order-1
- context is an escape into the lower context.
-
- previous_symbol == the last symbol seen
- !*/
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model_kernel_2 (
- entropy_encoder& coder
- );
-
- virtual ~entropy_encoder_model_kernel_2 (
- );
-
- inline void clear(
- );
-
- inline void encode (
- unsigned long symbol
- );
-
- entropy_encoder& get_entropy_encoder (
- ) { return coder; }
-
- static unsigned long get_alphabet_size (
- ) { return alphabet_size; }
-
- private:
-
- entropy_encoder& coder;
- typename cc::global_state_type gs;
- typename ccbig::global_state_type gsbig;
- cc order_0;
- ccbig* order_1[alphabet_size];
- unsigned long previous_symbol;
-
-
- // restricted functions
- entropy_encoder_model_kernel_2(entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>&); // copy constructor
- entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>& operator=(entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename ccbig
- >
- entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::
- entropy_encoder_model_kernel_2 (
- entropy_encoder& coder_
- ) :
- coder(coder_),
- order_0(gs),
- previous_symbol(0)
- {
- COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );
-
- unsigned long i;
- try
- {
- for (i = 0; i < alphabet_size; ++i)
- {
- order_1[i] = new ccbig(gsbig);
- }
- }
- catch (...)
- {
- for (unsigned long j = 0; j < i; ++j)
- {
- delete order_1[j];
- }
- throw;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename ccbig
- >
- entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::
- ~entropy_encoder_model_kernel_2 (
- )
- {
- for (unsigned long i = 0; i < alphabet_size; ++i)
- {
- delete order_1[i];
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename ccbig
- >
- void entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::
- clear(
- )
- {
- previous_symbol = 0;
- order_0.clear();
- for (unsigned long i = 0; i < alphabet_size; ++i)
- {
- order_1[i]->clear();
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename ccbig
- >
- void entropy_encoder_model_kernel_2<alphabet_size,entropy_encoder,cc,ccbig>::
- encode (
- unsigned long symbol
- )
- {
- unsigned long low_count = 0, high_count = 0, total_count = 0;
-
-
- ccbig& context = *order_1[previous_symbol];
-
- // if we have seen this symbol in the order-1 context
- if (context.get_range(symbol,low_count,high_count,total_count))
- {
- // update the count for this symbol
- context.increment_count(symbol,2);
- // encode this symbol
- coder.encode(low_count,high_count,total_count);
- previous_symbol = symbol;
- return;
- }
-
- // we didn't find the symbol in the order-1 context so we must escape to a
- // lower context.
-
- // escape to the order-0 context
- context.get_range(alphabet_size,low_count,high_count,total_count);
- coder.encode(low_count,high_count,total_count);
-
-
- // increment counts for the escape symbol and the current symbol
- context.increment_count(alphabet_size);
- context.increment_count(symbol,2);
-
- previous_symbol = symbol;
-
-
-
-
-
- // if we have seen this symbol in the order-0 context
- if (order_0.get_range(symbol,low_count,high_count,total_count))
- {
- // update the count for this symbol
- order_0.increment_count(symbol,2);
- // encode this symbol
- coder.encode(low_count,high_count,total_count);
- return;
- }
-
- // if we are here then the symbol does not appear in the order-0 context
-
-
- // since we have never seen the current symbol in this context
- // escape from order-0 context
- order_0.get_range(alphabet_size,low_count,high_count,total_count);
- coder.encode(low_count,high_count,total_count);
- // increment the count for the escape symbol
- order_0.increment_count(alphabet_size);
-
- // update the count for this symbol
- order_0.increment_count(symbol,2);
-
- // use order minus one context
- coder.encode(symbol,symbol+1,alphabet_size);
-
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_2_
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_3.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_3.h
deleted file mode 100644
index 0df28f201..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_3.h
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright (C) 2004 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_3_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_3_
-
-#include "../algs.h"
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../assert.h"
-
-namespace dlib
-{
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename cc_high
- >
- class entropy_encoder_model_kernel_3
- {
- /*!
- REQUIREMENTS ON cc
- cc is an implementation of conditioning_class/conditioning_class_kernel_abstract.h
- cc::get_alphabet_size() == alphabet_size+1
-
- REQUIREMENTS ON cc_high
- cc_high is an implementation of conditioning_class/conditioning_class_kernel_abstract.h
- cc_high::get_alphabet_size() == alphabet_size+1
-
- INITIAL VALUE
- - Initially this object's finite context model is empty
- - previous_symbol == 0
- - previous_symbol2 == 0
- - order_1 == pointer to an array of alphabet_size elements
- - order_2 == pointer to an array of alphabet_size*alphabet_size elements
- - order_2[i] == 0
-
- CONVENTION
- &get_entropy_encoder() == coder
- &order_0.get_global_state() == &gs
- &order_1[i]->get_global_state() == &gs
-
- if (order_2[i] != 0) then
- &order_2[i]->get_global_state() == &gs_high
-
- This is an order-2-1-0 model. The last symbol in the order-2, order-1 and
- order-0 contexts is an escape into the lower context.
-
- previous_symbol == the last symbol seen
- previous_symbol2 == the symbol we saw before previous_symbol
- !*/
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model_kernel_3 (
- entropy_encoder& coder
- );
-
- virtual ~entropy_encoder_model_kernel_3 (
- );
-
- inline void clear(
- );
-
- inline void encode (
- unsigned long symbol
- );
-
- entropy_encoder& get_entropy_encoder (
- ) { return coder; }
-
- static unsigned long get_alphabet_size (
- ) { return alphabet_size; }
-
- private:
-
- entropy_encoder& coder;
- typename cc::global_state_type gs;
- typename cc_high::global_state_type gs_high;
- cc order_0;
- cc** order_1;
- unsigned long previous_symbol;
- cc_high** order_2;
- unsigned long previous_symbol2;
-
-
- // restricted functions
- entropy_encoder_model_kernel_3(entropy_encoder_model_kernel_3&); // copy constructor
- entropy_encoder_model_kernel_3& operator=(entropy_encoder_model_kernel_3&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename cc_high
- >
- entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::
- entropy_encoder_model_kernel_3 (
- entropy_encoder& coder_
- ) :
- coder(coder_),
- order_0(gs),
- order_1(0),
- previous_symbol(0),
- order_2(0),
- previous_symbol2(0)
- {
- COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );
-
- try
- {
- order_1 = new cc*[alphabet_size];
- order_2 = new cc_high*[alphabet_size*alphabet_size];
- }
- catch (...)
- {
- if (order_1) delete [] order_1;
- if (order_2) delete [] order_2;
- throw;
- }
-
- unsigned long i;
-
- for (i = 0; i < (alphabet_size*alphabet_size); ++i)
- {
- order_2[i] = 0;
- }
-
- try
- {
- for (i = 0; i < alphabet_size; ++i)
- {
- order_1[i] = new cc(gs);
- }
- }
- catch (...)
- {
- for (unsigned long j = 0; j < i; ++j)
- {
- delete order_1[j];
- }
- throw;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename cc_high
- >
- entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::
- ~entropy_encoder_model_kernel_3 (
- )
- {
- for (unsigned long i = 0; i < alphabet_size; ++i)
- {
- delete order_1[i];
- }
-
- for (unsigned long i = 0; i < alphabet_size*alphabet_size; ++i)
- {
- if (order_2[i] != 0)
- delete order_2[i];
- }
- delete [] order_1;
- delete [] order_2;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename cc_high
- >
- void entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::
- clear(
- )
- {
- previous_symbol = 0;
- previous_symbol2 = 0;
- order_0.clear();
- for (unsigned long i = 0; i < alphabet_size; ++i)
- {
- order_1[i]->clear();
- }
-
- for (unsigned long i = 0; i < alphabet_size*alphabet_size; ++i)
- {
- if (order_2[i] != 0)
- {
- delete order_2[i];
- order_2[i] = 0;
- }
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- typename cc,
- typename cc_high
- >
- void entropy_encoder_model_kernel_3<alphabet_size,entropy_encoder,cc,cc_high>::
- encode (
- unsigned long symbol
- )
- {
- unsigned long low_count = 0, high_count = 0, total_count = 0;
-
-
- // order-2 context stuff
- {
- unsigned long temp = previous_symbol + (previous_symbol2 * alphabet_size);
- previous_symbol2 = previous_symbol;
-
- if (order_2[temp] != 0)
- {
- if (order_2[temp]->get_range(symbol,low_count,high_count,total_count))
- {
- // there was an entry for this symbol in this context
-
- // update the count for this symbol
- order_2[temp]->increment_count(symbol,2);
- // encode this symbol
- coder.encode(low_count,high_count,total_count);
- previous_symbol = symbol;
- return;
- }
-
- // there was no entry for this symbol in this context so we must
- // escape to order-1
-
- // escape to the order-1 context
- order_2[temp]->get_range(alphabet_size,low_count,high_count,total_count);
- coder.encode(low_count,high_count,total_count);
-
- // increment the count for the escape symbol
- order_2[temp]->increment_count(alphabet_size);
-
- }
- else
- {
- order_2[temp] = new cc_high(gs_high);
-
- // in this case the decoder knows to escape to order-1 because
- // there was no conditioning_class object in this context yet.
- // so we don't need to actually write the escape symbol
- }
-
- // update the count for this symbol in this context
- order_2[temp]->increment_count(symbol,2);
- }
-
-
-
-
- // order-1 context stuff
- {
- cc& context = *order_1[previous_symbol];
-
- // if we have seen this symbol in the order-1 context
- if (context.get_range(symbol,low_count,high_count,total_count))
- {
- // update the count for this symbol
- context.increment_count(symbol,2);
- // encode this symbol
- coder.encode(low_count,high_count,total_count);
- previous_symbol = symbol;
- return;
- }
-
- // we didn't find the symbol in the order-1 context so we must escape to a
- // lower context.
-
- // escape to the order-0 context
- context.get_range(alphabet_size,low_count,high_count,total_count);
- coder.encode(low_count,high_count,total_count);
-
-
- // increment counts for the escape symbol and the current symbol
- context.increment_count(alphabet_size);
- context.increment_count(symbol,2);
- }
-
- previous_symbol = symbol;
-
-
-
-
-
- // if we have seen this symbol in the order-0 context
- if (order_0.get_range(symbol,low_count,high_count,total_count))
- {
- // update the count for this symbol
- order_0.increment_count(symbol,2);
- // encode this symbol
- coder.encode(low_count,high_count,total_count);
- return;
- }
-
- // if we are here then the symbol does not appear in the order-0 context
-
-
- // since we have never seen the current symbol in this context
- // escape from order-0 context
- order_0.get_range(alphabet_size,low_count,high_count,total_count);
- coder.encode(low_count,high_count,total_count);
- // increment the count for the escape symbol
- order_0.increment_count(alphabet_size);
-
- // update the count for this symbol
- order_0.increment_count(symbol,2);
-
- // use order minus one context
- coder.encode(symbol,symbol+1,alphabet_size);
-
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_3_
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_4.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_4.h
deleted file mode 100644
index 0e5ae46d3..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_4.h
+++ /dev/null
@@ -1,553 +0,0 @@
-// Copyright (C) 2005 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_4_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_4_
-
-#include "../algs.h"
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../assert.h"
-
-
-
-namespace dlib
-{
-
- namespace eemk4
- {
- struct node
- {
- node* next;
- node* child_context;
- node* parent_context;
-
- unsigned short symbol;
- unsigned short count;
- unsigned short total;
- unsigned short escapes;
- };
- }
-
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- class entropy_encoder_model_kernel_4
- {
- /*!
- REQUIREMENTS ON total_nodes
- - 4096 < total_nodes
- - this is the total number of nodes that we will use in the tree
-
- REQUIREMENTS ON order
- - 0 <= order
- - this is the maximum depth-1 the tree will be allowed to go (note
- that the root level is depth 0).
-
- GENERAL NOTES
- This implementation follows more or less the implementation
- strategy laid out by Alistair Moffat in his paper
- Implementing the PPM data compression scheme. Published in IEEE
- Transactions on Communications, 38(11):1917-1921, 1990.
-
- The escape method used will be method D.
-
-
- INITIAL VALUE
- - root == pointer to an array of total_nodes nodes
- - next_node == 1
- - cur == root
- - cur_order = 0
- - root->next == 0
- - root->parent_context == 0
- - root->child_context == 0
- - root->escapes == 0
- - root->total == 0
-
- CONVENTION
- - &get_entropy_encoder() == coder
- - root == pointer to an array of total_nodes nodes.
- this is also the root of the tree.
-
- - if (next_node < total_nodes) then
- - next_node == the next node in root that has not yet been allocated
-
- - root->next == 0
- - root->parent_context == 0
-
-
- - for every node in the tree:
- {
- - NOTATION:
- - The "context" of a node is the string of symbols seen
- when you go from the root of the tree down (down though
- child context pointers) to the node, including the symbol at
- the node itself. (note that the context of the root node
- is "" or the empty string)
- - A set of nodes is in the same "context set" if all the node's
- contexts are of length n and all the node's contexts share
- the same prefix of length n-1.
- - The "child context set" of a node is a set of nodes with
- contexts that are one symbol longer and prefixed by the node's
- context. For example, if a node has a context "abc" then the
- nodes for contexts "abca", "abcb", "abcc", etc. are all in
- the child context set of the node.
- - The "parent context" of a node is the context that is one
- symbol shorter than the node's context and includes the
- symbol in the node. So the parent context of a node with
- context "abcd" would be the context "bcd".
-
-
- - if (next != 0) then
- - next == pointer to the next node in the same context set
- - if (child_context != 0) then
- - child_context == pointer to the first node of the child
- context set for this node.
- - if (parent_context != 0) then
- - parent_context == pointer to the parent context of this node.
- - else
- - this node is the root node of the tree
-
-
- - if (this is not the root node) then
- - symbol == the symbol represented with this node
- - count == the number of times this symbol has been seen in its
- parent context.
- - else
- - the root doesn't have a symbol. i.e. the context for the
- root node is "" or the empty string.
-
- - total == The sum of the counts of all the nodes
- in the child context set + escapes.
- - escapes == the escape count for the context represented
- by the node.
- }
-
-
- - cur_order < order
- - cur_order == the depth of the node cur in the tree.
- (note that the root node has depth 0)
- - cur == pointer to the node in the tree who's context matches
- the most recent symbols we have seen.
-
-
- !*/
-
- typedef eemk4::node node;
-
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model_kernel_4 (
- entropy_encoder& coder
- );
-
- virtual ~entropy_encoder_model_kernel_4 (
- );
-
- inline void clear(
- );
-
- inline void encode (
- unsigned long symbol
- );
-
- entropy_encoder& get_entropy_encoder (
- ) { return coder; }
-
- static unsigned long get_alphabet_size (
- ) { return alphabet_size; }
-
- private:
-
- inline eemk4::node* allocate_node (
- );
- /*!
- requires
- - space_left() == true
- ensures
- - returns a pointer to a new node
- !*/
-
- inline void destroy_tree (
- );
- /*!
- ensures
- - deallocates all nodes except the root
- - #root->child_context == 0
- - #root->escapes == 0
- - #root->total == 0
- - #cur == root
- - #cur_order == 0
- !*/
-
-
- inline bool space_left (
- ) const;
- /*!
- ensures
- - returns true if there is at least 1 free node left.
- - returns false otherwise
- !*/
-
-
- inline void scale_counts (
- node* n
- );
- /*!
- ensures
- - divides all the counts in the child context set of n by 2.
- - none of the nodes in the child context set will have a count of 0
- !*/
-
-
- unsigned long next_node;
- entropy_encoder& coder;
- node* root;
- node* cur;
- unsigned long cur_order;
-
-
- // restricted functions
- entropy_encoder_model_kernel_4(entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>&); // copy constructor
- entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>& operator=(entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- entropy_encoder_model_kernel_4 (
- entropy_encoder& coder_
- ) :
- next_node(1),
- coder(coder_),
- cur_order(0)
- {
- COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );
- COMPILE_TIME_ASSERT( 4096 < total_nodes );
-
- root = new node[total_nodes];
- cur = root;
-
- root->child_context = 0;
- root->escapes = 0;
- root->next = 0;
- root->parent_context = 0;
- root->total = 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- ~entropy_encoder_model_kernel_4 (
- )
- {
- delete [] root;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- clear(
- )
- {
- destroy_tree();
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- encode (
- unsigned long sym
- )
- {
- unsigned short symbol = static_cast<unsigned short>(sym);
- node* temp = cur;
- cur = 0;
- unsigned short low_count, high_count, total_count;
- node* new_node = 0;
-
- // local_order will track the level of temp in the tree
- unsigned long local_order = cur_order;
-
- while (true)
- {
- high_count = 0;
- if (space_left())
- {
- total_count = temp->total;
-
- if (total_count > 0)
- {
- // check if we need to scale the counts
- if (total_count > 10000)
- {
- scale_counts(temp);
- total_count = temp->total;
- }
-
- // find either the symbol we are looking for or the
- // end of the context set
- node* n = temp->child_context;
- node* last = 0;
- while (true)
- {
- high_count += n->count;
-
- if (n->symbol == symbol || n->next == 0)
- break;
- last = n;
- n = n->next;
- }
-
- low_count = high_count - n->count;
-
- // if we found the symbol
- if (n->symbol == symbol)
- {
- if (new_node != 0)
- {
- new_node->parent_context = n;
- }
-
- coder.encode(low_count,high_count,total_count);
- n->count += 8;
- temp->total += 8;
-
-
- // move this node to the front
- if (last)
- {
- last->next = n->next;
- n->next = temp->child_context;
- temp->child_context = n;
- }
-
-
- if (cur == 0)
- {
- if (local_order < order)
- {
- cur_order = local_order+1;
- cur = n;
- }
- else
- {
- cur = n->parent_context;
- cur_order = local_order;
- }
- }
-
- break;
-
- }
- // if we hit the end of the context set without finding the symbol
- else
- {
- if (new_node != 0)
- {
- new_node->parent_context = allocate_node();
- new_node = new_node->parent_context;
- }
- else
- {
- new_node = allocate_node();
- }
-
- n->next = new_node;
-
- // write an escape to a lower context
- coder.encode(high_count,total_count,total_count);
- }
-
- }
- else // if (total_count == 0)
- {
- // this means that temp->child_context == 0 so we should make
- // a new node here.
- if (new_node != 0)
- {
- new_node->parent_context = allocate_node();
- new_node = new_node->parent_context;
- }
- else
- {
- new_node = allocate_node();
- }
-
- temp->child_context = new_node;
- }
-
- if (cur == 0 && local_order < order)
- {
- cur = new_node;
- cur_order = local_order+1;
- }
-
- // fill out the new node
- new_node->child_context = 0;
- new_node->count = 4;
- new_node->escapes = 0;
- new_node->next = 0;
- new_node->symbol = static_cast<unsigned short>(symbol);
- new_node->total = 0;
- temp->escapes += 4;
- temp->total += 8;
-
-
- if (temp != root)
- {
- temp = temp->parent_context;
- --local_order;
- continue;
- }
-
- // since this is the root we are going to the order-(-1) context
- // so we can just take care of that here.
- new_node->parent_context = root;
- coder.encode(symbol,symbol+1,alphabet_size);
-
- if (cur == 0)
- {
- cur = root;
- cur_order = 0;
- }
- break;
- }
- else
- {
- // there isn't enough space so we should rebuild the tree
- destroy_tree();
- temp = cur;
- local_order = cur_order;
- cur = 0;
- new_node = 0;
- }
- } // while (true)
-
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // private member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- eemk4::node* entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- allocate_node (
- )
- {
- node* temp;
- temp = root + next_node;
- ++next_node;
- return temp;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- destroy_tree (
- )
- {
- next_node = 1;
- root->child_context = 0;
- root->escapes = 0;
- root->total = 0;
- cur = root;
- cur_order = 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- bool entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- space_left (
- ) const
- {
- return (next_node < total_nodes);
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_4<alphabet_size,entropy_encoder,total_nodes,order>::
- scale_counts (
- node* temp
- )
- {
- if (temp->escapes > 1)
- temp->escapes >>= 1;
- temp->total = temp->escapes;
-
- node* n = temp->child_context;
- while (n != 0)
- {
- if (n->count > 1)
- n->count >>= 1;
-
- temp->total += n->count;
- n = n->next;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_4_
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_5.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_5.h
deleted file mode 100644
index 6c0c30426..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_5.h
+++ /dev/null
@@ -1,817 +0,0 @@
-// Copyright (C) 2005 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_5_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_5_
-
-#include "../algs.h"
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../assert.h"
-
-
-
-namespace dlib
-{
-
- namespace eemk5
- {
- struct node
- {
- node* next;
- node* child_context;
- node* parent_context;
-
- unsigned short symbol;
- unsigned short count;
- unsigned short total;
- unsigned short escapes;
- };
- }
-
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- class entropy_encoder_model_kernel_5
- {
- /*!
- REQUIREMENTS ON total_nodes
- - 4096 < total_nodes
- - this is the total number of nodes that we will use in the tree
-
- REQUIREMENTS ON order
- - 0 <= order
- - this is the maximum depth-1 the tree will be allowed to go (note
- that the root level is depth 0).
-
- GENERAL NOTES
- This implementation follows more or less the implementation
- strategy laid out by Alistair Moffat in his paper
- Implementing the PPM data compression scheme. Published in IEEE
- Transactions on Communications, 38(11):1917-1921, 1990.
-
- The escape method used will be method D.
-
- This also uses Dmitry Shkarin's Information Inheritance scheme.
- (described in "PPM: one step to practicality" and "Improving the
- Efficiency of the PPM Algorithm")
-
-
- INITIAL VALUE
- - root == pointer to an array of total_nodes nodes
- - next_node == 1
- - cur == root
- - cur_order = 0
- - root->next == 0
- - root->parent_context == 0
- - root->child_context == 0
- - root->escapes == 0
- - root->total == 0
- - stack_size == 0
- - exc_used == false
- - for all i: exc[i] == 0
-
- CONVENTION
- - pop() == stack[stack_size-1].n and stack[stack_size-1].nc
- - exc_used == something_is_excluded()
- - is_excluded(symbol) == bit symbol&0x1F from exc[symbol>>5]
- - &get_entropy_encoder() == coder
- - root == pointer to an array of total_nodes nodes.
- this is also the root of the tree.
- - if (next_node < total_nodes) then
- - next_node == the next node in root that has not yet been allocated
-
- - root->next == 0
- - root->parent_context == 0
-
-
- - for every node in the tree:
- {
- - NOTATION:
- - The "context" of a node is the string of symbols seen
- when you go from the root of the tree down (down though
- child context pointers) to the node, including the symbol at
- the node itself. (note that the context of the root node
- is "" or the empty string)
- - A set of nodes is in the same "context set" if all the node's
- contexts are of length n and all the node's contexts share
- the same prefix of length n-1.
- - The "child context set" of a node is a set of nodes with
- contexts that are one symbol longer and prefixed by the node's
- context. For example, if a node has a context "abc" then the
- nodes for contexts "abca", "abcb", "abcc", etc. are all in
- the child context set of the node.
- - The "parent context" of a node is the context that is one
- symbol shorter than the node's context and includes the
- symbol in the node. So the parent context of a node with
- context "abcd" would be the context "bcd".
-
-
- - if (next != 0) then
- - next == pointer to the next node in the same context set
- - if (child_context != 0) then
- - child_context == pointer to the first node of the child
- context set for this node.
- - escapes > 0
- - if (parent_context != 0) then
- - parent_context == pointer to the parent context of this node.
- - else
- - this node is the root node of the tree
-
-
- - if (this is not the root node) then
- - symbol == the symbol represented with this node
- - count == the number of times this symbol has been seen in its
- parent context.
- - else
- - the root doesn't have a symbol. i.e. the context for the
- root node is "" or the empty string.
-
- - total == The sum of the counts of all the nodes
- in the child context set + escapes.
- - escapes == the escape count for the context represented
- by the node.
- - count > 0
- }
-
-
- - cur_order < order
- - cur_order == the depth of the node cur in the tree.
- (note that the root node has depth 0)
- - cur == pointer to the node in the tree who's context matches
- the most recent symbols we have seen.
-
-
- !*/
-
- typedef eemk5::node node;
-
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model_kernel_5 (
- entropy_encoder& coder
- );
-
- virtual ~entropy_encoder_model_kernel_5 (
- );
-
- inline void clear(
- );
-
- inline void encode (
- unsigned long symbol
- );
-
- entropy_encoder& get_entropy_encoder (
- ) { return coder; }
-
- static unsigned long get_alphabet_size (
- ) { return alphabet_size; }
-
- private:
-
- inline eemk5::node* allocate_node (
- );
- /*!
- requires
- - space_left() == true
- ensures
- - returns a pointer to a new node
- !*/
-
- inline bool space_left (
- ) const;
- /*!
- ensures
- - returns true if there is at least 1 free node left.
- - returns false otherwise
- !*/
-
- inline void exclude (
- unsigned short symbol
- );
- /*!
- ensures
- - #is_excluded(symbol) == true
- - #something_is_excluded() == true
- !*/
-
- inline bool something_is_excluded (
- );
- /*!
- ensures
- - returns true if some symbol has been excluded.
- returns false otherwise
- !*/
-
- inline bool is_excluded (
- unsigned short symbol
- );
- /*!
- ensures
- - if (symbol has been excluded) then
- - returns true
- - else
- - returns false
- !*/
-
- inline void clear_exclusions (
- );
- /*!
- ensures
- - for all symbols #is_excluded(symbol) == false
- - #something_is_excluded() == true
- !*/
-
- inline void scale_counts (
- node* n
- );
- /*!
- ensures
- - divides all the counts in the child context set of n by 2.
- - none of the nodes in the child context set will have a count of 0
- !*/
-
- inline void push (
- node* n,
- node* nc
- );
- /*!
- requires
- - stack_size < order
- ensures
- - #pop(a,b): a == n && b == nc
- !*/
-
- inline void pop (
- node*& n,
- node*& nc
- );
- /*!
- requires
- - stack_size > 0
- ensures
- - returns the two nodes at the top of the stack
- !*/
-
- struct nodes
- {
- node* n;
- node* nc;
- };
-
- unsigned long next_node;
- entropy_encoder& coder;
- node* root;
- node* cur;
- unsigned long cur_order;
- unsigned long exc[alphabet_size/32+1];
- bool exc_used;
- nodes stack[order+1];
- unsigned long stack_size;
-
- // restricted functions
- entropy_encoder_model_kernel_5(entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>&); // copy constructor
- entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>& operator=(entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- entropy_encoder_model_kernel_5 (
- entropy_encoder& coder_
- ) :
- next_node(1),
- coder(coder_),
- cur_order(0),
- stack_size(0)
- {
- COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );
- COMPILE_TIME_ASSERT( 4096 < total_nodes );
-
- root = new node[total_nodes];
- cur = root;
-
- root->child_context = 0;
- root->escapes = 0;
- root->next = 0;
- root->parent_context = 0;
- root->total = 0;
-
- clear_exclusions();
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- ~entropy_encoder_model_kernel_5 (
- )
- {
- delete [] root;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- clear(
- )
- {
- next_node = 1;
- root->child_context = 0;
- root->escapes = 0;
- root->total = 0;
- cur = root;
- cur_order = 0;
- stack_size = 0;
-
- clear_exclusions();
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- encode (
- unsigned long sym
- )
- {
- unsigned short symbol = static_cast<unsigned short>(sym);
- node* temp = cur;
- cur = 0;
- unsigned short low_count, high_count, total_count;
- node* new_node = 0;
-
- // local_order will track the level of temp in the tree
- unsigned long local_order = cur_order;
-
-
- unsigned short c; // c == t(a|sk)
- unsigned short t; // t == T(sk)
-
-
- if (something_is_excluded())
- clear_exclusions();
-
- while (true)
- {
- low_count = 0;
- high_count = 0;
- if (space_left())
- {
- total_count = temp->total;
-
- if (total_count > 0)
- {
- // check if we need to scale the counts
- if (total_count > 10000)
- {
- scale_counts(temp);
- total_count = temp->total;
- }
-
-
- // find the symbol we are looking for and put a pointer to it
- // into found_symbol. If it isn't found then found_symbol == 0.
- // also, low_count and high_count will be correctly set.
- node* n = temp->child_context;
- node* found_symbol = 0;
- node* last = 0;
- if (something_is_excluded())
- {
- node* templast = 0;
- while (true)
- {
- if (is_excluded(n->symbol) == false)
- {
- exclude(n->symbol);
- if (found_symbol == 0)
- {
- high_count += n->count;
- if (n->symbol == symbol)
- {
- found_symbol = n;
- last = templast;
- low_count = high_count - n->count;
- }
- }
- }
- else
- {
- total_count -= n->count;
- }
-
- if (n->next == 0)
- break;
- templast = n;
- n = n->next;
- }
- }
- else
- {
- while (true)
- {
- high_count += n->count;
- exclude(n->symbol);
-
- if (n->symbol == symbol)
- {
- found_symbol = n;
- low_count = high_count - n->count;
- break;
- }
-
- if (n->next == 0)
- break;
- last = n;
- n = n->next;
- }
- }
-
-
-
-
-
- // if we found the symbol
- if (found_symbol)
- {
- n = found_symbol;
- if (new_node != 0)
- {
- new_node->parent_context = found_symbol;
- }
-
-
- coder.encode(low_count,high_count,total_count);
- c = n->count += 8;
- t = temp->total += 8;
-
- // move this node to the front
- if (last)
- {
- last->next = n->next;
- n->next = temp->child_context;
- temp->child_context = n;
- }
-
-
- if (cur == 0)
- {
- if (local_order >= order)
- {
- cur = n->parent_context;
- cur_order = local_order;
- }
- else
- {
- cur_order = local_order+1;
- cur = n;
- }
- }
-
- break;
-
- }
- // if we hit the end of the context set without finding the symbol
- else
- {
- // finish excluding all the symbols
- while (n->next)
- {
- exclude(n->symbol);
- n = n->next;
- }
-
- if (new_node != 0)
- {
- new_node->parent_context = allocate_node();
- new_node = new_node->parent_context;
- }
- else
- {
- new_node = allocate_node();
- }
-
- n->next = new_node;
-
- // write an escape to a lower context
- coder.encode(high_count,total_count,total_count);
- }
-
- }
- else // if (total_count == 0)
- {
- // this means that temp->child_context == 0 so we should make
- // a new node here.
- if (new_node != 0)
- {
- new_node->parent_context = allocate_node();
- new_node = new_node->parent_context;
- }
- else
- {
- new_node = allocate_node();
- }
-
- temp->child_context = new_node;
- }
-
- if (cur == 0 && local_order < order)
- {
- cur = new_node;
- cur_order = local_order+1;
- }
-
- // fill out the new node
- new_node->child_context = 0;
- new_node->escapes = 0;
- new_node->next = 0;
- new_node->total = 0;
- push(new_node,temp);
-
- if (temp != root)
- {
- temp = temp->parent_context;
- --local_order;
- continue;
- }
-
- t = 2056;
- c = 8;
-
- // since this is the root we are going to the order-(-1) context
- // so we can just take care of that here.
- new_node->parent_context = root;
- coder.encode(symbol,symbol+1,alphabet_size);
-
- if (cur == 0)
- {
- cur = root;
- cur_order = 0;
- }
- break;
- }
- else
- {
- // there isn't enough space so we should throw away the tree
- clear();
- temp = cur;
- local_order = cur_order;
- cur = 0;
- new_node = 0;
- }
- } // while (true)
-
-
- // initialize the counts and symbol for any new nodes we have added
- // to the tree.
- node* n, *nc;
- while (stack_size > 0)
- {
- pop(n,nc);
-
- n->symbol = static_cast<unsigned short>(symbol);
-
- // if nc is not a determnistic context
- if (nc->total)
- {
- unsigned long temp2 = t-c+nc->total - nc->escapes - nc->escapes;
- unsigned long temp = nc->total;
- temp *= c;
- temp /= (temp2|1); // this oring by 1 is just to make sure that temp2 is never zero
- temp += 2;
- if (temp > 50000) temp = 50000;
- n->count = static_cast<unsigned short>(temp);
-
-
- nc->escapes += 4;
- nc->total += static_cast<unsigned short>(temp) + 4;
- }
- else
- {
- n->count = 3 + 5*(c)/(t-c);
-
- nc->escapes = 4;
- nc->total = n->count + 4;
- }
-
- while (nc->total > 10000)
- {
- scale_counts(nc);
- }
- }
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // private member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- eemk5::node* entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- allocate_node (
- )
- {
- node* temp;
- temp = root + next_node;
- ++next_node;
- return temp;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- bool entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- space_left (
- ) const
- {
- return (next_node < total_nodes);
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- exclude (
- unsigned short symbol
- )
- {
- exc_used = true;
- unsigned long temp = 1;
- temp <<= symbol&0x1F;
- exc[symbol>>5] |= temp;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- bool entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- is_excluded (
- unsigned short symbol
- )
- {
- unsigned long temp = 1;
- temp <<= symbol&0x1F;
- return ((exc[symbol>>5]&temp) != 0);
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- clear_exclusions (
- )
- {
- exc_used = false;
- for (unsigned long i = 0; i < alphabet_size/32+1; ++i)
- {
- exc[i] = 0;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- bool entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- something_is_excluded (
- )
- {
- return exc_used;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- push (
- node* n,
- node* nc
- )
- {
- stack[stack_size].n = n;
- stack[stack_size].nc = nc;
- ++stack_size;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- pop (
- node*& n,
- node*& nc
- )
- {
- --stack_size;
- n = stack[stack_size].n;
- nc = stack[stack_size].nc;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder,
- unsigned long total_nodes,
- unsigned long order
- >
- void entropy_encoder_model_kernel_5<alphabet_size,entropy_encoder,total_nodes,order>::
- scale_counts (
- node* temp
- )
- {
- if (temp->escapes > 1)
- temp->escapes >>= 1;
- temp->total = temp->escapes;
-
- node* n = temp->child_context;
- while (n != 0)
- {
- if (n->count > 1)
- n->count >>= 1;
-
- temp->total += n->count;
- n = n->next;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_5_
-
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_6.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_6.h
deleted file mode 100644
index 2199bfbe4..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_6.h
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (C) 2005 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_6_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_6_
-
-#include "../algs.h"
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../assert.h"
-
-namespace dlib
-{
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder
- >
- class entropy_encoder_model_kernel_6
- {
- /*!
- INITIAL VALUE
- Initially this object's finite context model is empty
-
- CONVENTION
- &get_entropy_encoder() == coder
-
- This is an order-(-1) model. So it doesn't really do anything.
- Every symbol has the same probability.
- !*/
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model_kernel_6 (
- entropy_encoder& coder
- );
-
- virtual ~entropy_encoder_model_kernel_6 (
- );
-
- inline void clear(
- );
-
- inline void encode (
- unsigned long symbol
- );
-
- entropy_encoder& get_entropy_encoder (
- ) { return coder; }
-
- static unsigned long get_alphabet_size (
- ) { return alphabet_size; }
-
- private:
-
- entropy_encoder& coder;
-
- // restricted functions
- entropy_encoder_model_kernel_6(entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>&); // copy constructor
- entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>& operator=(entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder
- >
- entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::
- entropy_encoder_model_kernel_6 (
- entropy_encoder& coder_
- ) :
- coder(coder_)
- {
- COMPILE_TIME_ASSERT( 1 < alphabet_size && alphabet_size < 65535 );
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder
- >
- entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::
- ~entropy_encoder_model_kernel_6 (
- )
- {
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder
- >
- void entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::
- clear(
- )
- {
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder
- >
- void entropy_encoder_model_kernel_6<alphabet_size,entropy_encoder>::
- encode (
- unsigned long symbol
- )
- {
- // use order minus one context
- coder.encode(symbol,symbol+1,alphabet_size);
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_6_
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_abstract.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_abstract.h
deleted file mode 100644
index fb5f01bc7..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_abstract.h
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (C) 2004 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#undef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_ABSTRACT_
-#ifdef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_ABSTRACT_
-
-#include "../algs.h"
-
-namespace dlib
-{
-
- template <
- unsigned long alphabet_size,
- typename entropy_encoder
- >
- class entropy_encoder_model
- {
- /*!
- REQUIREMENTS ON alphabet_size
- 1 < alphabet_size < 65535
-
- REQUIREMENTS ON entropy_encoder
- is an implementation of entropy_encoder/entropy_encoder_kernel_abstract.h
-
- INITIAL VALUE
- Initially this object is at some predefined empty or ground state.
-
- WHAT THIS OBJECT REPRESENTS
- This object represents some kind of statistical model. You
- can use it to write symbols to an entropy_encoder and it will calculate
- the cumulative counts/probabilities and manage contexts for you.
-
- Note that all implementations of entropy_encoder_model and
- entropy_decoder_model are paired. This means that if you use
- entropy_encoder_model_kernel_n to encode something then you must
- use the corresponding entropy_decoder_model_kernel_n to decode it.
-
- Also note that this object does not perform any buffering of symbols. It
- writes them to its associated entropy_encoder immediately.
- This makes it safe to use multiple entropy_encoder_model objects with
- a single entropy_encoder without them trampling each other.
- !*/
-
- public:
-
- typedef entropy_encoder entropy_encoder_type;
-
- entropy_encoder_model (
- entropy_encoder& coder
- );
- /*!
- ensures
- - #*this is properly initialized
- - &#get_entropy_encoder() == &coder
- throws
- - any exception
- !*/
-
- virtual ~entropy_encoder_model (
- );
- /*!
- ensures
- - all memory associated with *this has been released
- !*/
-
- void clear(
- );
- /*!
- ensures
- - #*this has its initial value
- - does not modify get_entropy_encoder()
- throws
- - any exception
- if this exception is thrown then *this is unusable
- until clear() is called and succeeds
- !*/
-
- void encode (
- unsigned long symbol
- );
- /*!
- requires
- - symbol < alphabet_size
- ensures
- - encodes and writes the symbol to get_entropy_encoder().
- This also means that there is no internal buffering. symbol is
- written immediately to the entropy_encoder.
- throws
- - any exception
- If this exception is thrown then #*this is unusable until
- clear() is called and succeeds.
- !*/
-
- entropy_encoder& get_entropy_encoder (
- );
- /*!
- ensures
- - returns a reference to the entropy_encoder used by *this
- !*/
-
- static unsigned long get_alphabet_size (
- );
- /*!
- ensures
- - returns alphabet_size
- !*/
-
- private:
-
- // restricted functions
- entropy_encoder_model(entropy_encoder_model<alphabet_size,entropy_encoder>&); // copy constructor
- entropy_encoder_model<alphabet_size,entropy_encoder>& operator=(entropy_encoder_model<alphabet_size,entropy_encoder>&); // assignment operator
-
- };
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_ABSTRACT_
-
diff --git a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_c.h b/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_c.h
deleted file mode 100644
index 4637ddd1e..000000000
--- a/ml/dlib/dlib/entropy_encoder_model/entropy_encoder_model_kernel_c.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (C) 2004 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_ENTROPY_ENCODER_MODEL_KERNEl_C_
-#define DLIB_ENTROPY_ENCODER_MODEL_KERNEl_C_
-
-#include "entropy_encoder_model_kernel_abstract.h"
-#include "../algs.h"
-#include "../assert.h"
-#include <iostream>
-
-namespace dlib
-{
-
- template <
- typename eem_base
- >
- class entropy_encoder_model_kernel_c : public eem_base
- {
- const unsigned long alphabet_size;
- typedef typename eem_base::entropy_encoder_type entropy_encoder;
-
- public:
-
- entropy_encoder_model_kernel_c (
- entropy_encoder& coder
- ) : eem_base(coder), alphabet_size(eem_base::get_alphabet_size()) {}
-
- void encode (
- unsigned long symbol
- );
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- typename eem_base
- >
- void entropy_encoder_model_kernel_c<eem_base>::
- encode (
- unsigned long symbol
- )
- {
- // make sure requires clause is not broken
- DLIB_CASSERT(symbol < alphabet_size,
- "\tvoid entropy_encoder_model::encode()"
- << "\n\tthe symbol must be in the range 0 to alphabet_size-1"
- << "\n\talphabet_size: " << alphabet_size
- << "\n\tsymbol: " << symbol
- << "\n\tthis: " << this
- );
-
- // call the real function
- eem_base::encode(symbol);
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_ENTROPY_ENCODER_MODEL_KERNEl_C_
-