X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/90e389f6ec12e60a62c362296ffcf314feb5b03d..08e6132fb4bea5f2f8c8ae2d450fb972f0067bcb:/include/stg/user_traff.h diff --git a/include/stg/user_traff.h b/include/stg/user_traff.h index fa4cc7fd..f186d00a 100644 --- a/include/stg/user_traff.h +++ b/include/stg/user_traff.h @@ -40,64 +40,36 @@ class DIR_TRAFF friend std::ostream & operator<< (std::ostream & o, const DIR_TRAFF & traff); public: - //------------------------------------------------------------------------- - DIR_TRAFF(); - DIR_TRAFF(const DIR_TRAFF & ts); - DIR_TRAFF & operator=(const DIR_TRAFF & ts); - ~DIR_TRAFF(); - uint64_t operator[](int idx) const; - uint64_t & operator[](int idx); + typedef std::vector ContainerType; + typedef ContainerType::size_type IndexType; + + DIR_TRAFF() {} + DIR_TRAFF(const DIR_TRAFF & ts) : traff(ts.traff) {} + DIR_TRAFF & operator=(const DIR_TRAFF & ts) { traff = ts.traff; return *this; } + const uint64_t & operator[](IndexType idx) const { return traff[idx]; } + uint64_t & operator[](IndexType idx) { return traff[idx]; } DIR_TRAFF operator+(const DIR_TRAFF & ts); + IndexType size() const { return traff.size(); } private: - std::vector traff; + ContainerType traff; }; -//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -inline DIR_TRAFF::DIR_TRAFF() - : traff(DIR_NUM, 0) -{ -} -//----------------------------------------------------------------------------- -inline DIR_TRAFF::DIR_TRAFF(const DIR_TRAFF & ts) - : traff(ts.traff) -{ -} -//----------------------------------------------------------------------------- -inline DIR_TRAFF::~DIR_TRAFF() -{ -} -//----------------------------------------------------------------------------- -inline DIR_TRAFF & DIR_TRAFF::operator=(const DIR_TRAFF & ts) -{ -traff = ts.traff; -return *this; -}; -//----------------------------------------------------------------------------- -inline uint64_t & DIR_TRAFF::operator[](int idx) -{ -return traff[idx]; -}; -//----------------------------------------------------------------------------- -inline uint64_t DIR_TRAFF::operator[](int idx) const +inline +DIR_TRAFF DIR_TRAFF::operator+(const DIR_TRAFF & ts) { -return traff[idx]; -}; -//----------------------------------------------------------------------------- -inline DIR_TRAFF DIR_TRAFF::operator+(const DIR_TRAFF & ts) -{ -for (int i = 0; i < DIR_NUM; i++) +for (IndexType i = 0; i < DIR_NUM; i++) { traff[i] = traff[i] + ts.traff[i]; } return *this; -}; +} //----------------------------------------------------------------------------- inline std::ostream & operator<<(std::ostream & o, const DIR_TRAFF & traff) { bool first = true; -for (size_t i = 0; i < DIR_NUM; ++i) +for (DIR_TRAFF::IndexType i = 0; i < DIR_NUM; ++i) { if (first) first = false; @@ -107,5 +79,25 @@ for (size_t i = 0; i < DIR_NUM; ++i) } return o; } -//----------------------------------------------------------------------------- + +class DIR_TRAFF_RES +{ +public: + typedef RESETABLE ValueType; + typedef std::vector ContainerType; + typedef ContainerType::size_type IndexType; + + DIR_TRAFF_RES(const DIR_TRAFF & ts) + : traff(ts.size()) + { + for (IndexType i = 0; i < ts.size(); ++i) + traff[i] = ts[i]; + } + const ValueType & operator[](IndexType idx) const { return traff[idx]; } + ValueType & operator[](IndexType idx) { return traff[idx]; } + +private: + ContainerType traff; +}; + #endif