summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/conditioning_class/conditioning_class_kernel_c.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/conditioning_class/conditioning_class_kernel_c.h')
-rw-r--r--ml/dlib/dlib/conditioning_class/conditioning_class_kernel_c.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/ml/dlib/dlib/conditioning_class/conditioning_class_kernel_c.h b/ml/dlib/dlib/conditioning_class/conditioning_class_kernel_c.h
new file mode 100644
index 000000000..964240be8
--- /dev/null
+++ b/ml/dlib/dlib/conditioning_class/conditioning_class_kernel_c.h
@@ -0,0 +1,162 @@
+// Copyright (C) 2003 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+#ifndef DLIB_CONDITIONING_CLASS_KERNEl_C_
+#define DLIB_CONDITIONING_CLASS_KERNEl_C_
+
+#include "conditioning_class_kernel_abstract.h"
+#include "../algs.h"
+#include "../assert.h"
+#include <iostream>
+
+namespace dlib
+{
+
+ template <
+ typename cc_base
+ >
+ class conditioning_class_kernel_c : public cc_base
+ {
+ const unsigned long alphabet_size;
+
+ public:
+
+ conditioning_class_kernel_c (
+ typename cc_base::global_state_type& global_state
+ ) : cc_base(global_state),alphabet_size(cc_base::get_alphabet_size()) {}
+
+ bool increment_count (
+ unsigned long symbol,
+ unsigned short amount = 1
+ );
+
+ unsigned long get_count (
+ unsigned long symbol
+ ) const;
+
+ unsigned long get_range (
+ unsigned long symbol,
+ unsigned long& low_count,
+ unsigned long& high_count,
+ unsigned long& total_count
+ ) const;
+
+ void get_symbol (
+ unsigned long target,
+ unsigned long& symbol,
+ unsigned long& low_count,
+ unsigned long& high_count
+ ) const;
+ };
+
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+// member function definitions
+// ----------------------------------------------------------------------------------------
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename cc_base
+ >
+ bool conditioning_class_kernel_c<cc_base>::
+ increment_count (
+ unsigned long symbol,
+ unsigned short amount
+ )
+ {
+ // make sure requires clause is not broken
+ DLIB_CASSERT(symbol < alphabet_size &&
+ 0 < amount && amount < 32768,
+ "\tvoid conditioning_class::increment_count()"
+ << "\n\tthe symbol must be in the range 0 to alphabet_size-1. and"
+ << "\n\tamount must be in the range 1 to 32767"
+ << "\n\talphabet_size: " << alphabet_size
+ << "\n\tsymbol: " << symbol
+ << "\n\tamount: " << amount
+ << "\n\tthis: " << this
+ );
+
+ // call the real function
+ return cc_base::increment_count(symbol,amount);
+ }
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename cc_base
+ >
+ unsigned long conditioning_class_kernel_c<cc_base>::
+ get_count (
+ unsigned long symbol
+ ) const
+ {
+ // make sure requires clause is not broken
+ DLIB_CASSERT(symbol < alphabet_size,
+ "\tvoid conditioning_class::get_count()"
+ << "\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
+ return cc_base::get_count(symbol);
+ }
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename cc_base
+ >
+ unsigned long conditioning_class_kernel_c<cc_base>::
+ get_range (
+ unsigned long symbol,
+ unsigned long& low_count,
+ unsigned long& high_count,
+ unsigned long& total_count
+ ) const
+ {
+ // make sure requires clause is not broken
+ DLIB_CASSERT(symbol < alphabet_size,
+ "\tvoid conditioning_class::get_range()"
+ << "\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
+ return cc_base::get_range(symbol,low_count,high_count,total_count);
+ }
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename cc_base
+ >
+ void conditioning_class_kernel_c<cc_base>::
+ get_symbol (
+ unsigned long target,
+ unsigned long& symbol,
+ unsigned long& low_count,
+ unsigned long& high_count
+ ) const
+ {
+ // make sure requires clause is not broken
+ DLIB_CASSERT( target < this->get_total(),
+ "\tvoid conditioning_class::get_symbol()"
+ << "\n\tthe target must be in the range 0 to get_total()-1"
+ << "\n\tget_total(): " << this->get_total()
+ << "\n\ttarget: " << target
+ << "\n\tthis: " << this
+ );
+
+ // call the real function
+ cc_base::get_symbol(target,symbol,low_count,high_count);
+ }
+
+// ----------------------------------------------------------------------------------------
+
+}
+
+#endif // DLIB_CONDITIONING_CLASS_KERNEl_C_
+