00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef SHTTL_COUNTER_ARRAY_H
00037 #define SHTTL_COUNTER_ARRAY_H
00038
00039 #include <vector>
00040 #include "counter.h"
00041
00042 namespace shttl
00043 {
00044 template < typename T = u8 >
00045 class counter_array
00046 {
00047 public:
00048
00049 typedef size_t size_type;
00050 typedef T value_type;
00051 typedef counter_array<T> this_type;
00052 typedef counter_base<T, T&> counter_type;
00053
00054
00055 size_type size() const { return m_array.size(); }
00056 value_type initv() const { return m_initv; }
00057 value_type min() const { return m_min; }
00058 value_type max() const { return m_max; }
00059 value_type threshold() const{ return m_threshold; }
00060
00061
00062 explicit counter_array(
00063 size_type size = 0,
00064 value_type initv = value_type(),
00065 value_type min = 0,
00066 value_type max = 3,
00067 value_type add = 1,
00068 value_type sub = 1,
00069 value_type threshold = 0
00070 )
00071 {
00072 construct( size, initv, min, max, add, sub, threshold );
00073 }
00074
00075 void construct(
00076 size_type size,
00077 value_type initv = value_type(),
00078 value_type min = 0,
00079 value_type max = 3,
00080 value_type add = 1,
00081 value_type sub = 1,
00082 value_type threshold = 0
00083 ){
00084 m_array.resize( size, initv );
00085 m_initv = initv;
00086 m_min = min;
00087 m_max = max;
00088 m_add = add;
00089 m_sub = sub;
00090 m_threshold = threshold;
00091 }
00092
00093 ~counter_array()
00094 {
00095 }
00096
00097
00098
00099 counter_type operator[](const size_type s)
00100 {
00101 return at( s );
00102 }
00103
00104 counter_type at(const size_type s)
00105 {
00106 return counter_base<T, T&>(
00107 m_array[s],
00108 m_initv,
00109 m_min,
00110 m_max,
00111 m_add,
00112 m_sub,
00113 m_threshold
00114 );
00115 }
00116
00117 protected:
00118 std::vector< value_type > m_array;
00119
00120 value_type m_initv;
00121 value_type m_min;
00122 value_type m_max;
00123 value_type m_add;
00124 value_type m_sub;
00125 value_type m_threshold;
00126
00127 };
00128
00129 }
00130
00131 #endif // SHTTL_COUNTER_ARRAY_H