src/Lib/shttl/table.h

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 #ifndef SHTTL_TABLE_H
00033 #define SHTTL_TABLE_H
00034 
00035 #include <vector>
00036 #include "shttl_types.h"
00037 #include "replacement.h"
00038 #include "lru.h"
00039 
00040 namespace shttl
00041 {
00042     //
00043     // A simple table with a replacement function.
00044     //
00045     template < typename type, typename replacer = lru<size_t> > 
00046     class table
00047     {
00048     public:
00049         typedef std::vector<type> array_type;
00050         typedef typename array_type::reference reference;
00051         typedef typename array_type::const_reference const_reference;
00052 
00053         table()
00054         {
00055         }
00056 
00057         table( const size_t size, const type& value = type() )
00058         {
00059             construct( size ,value );
00060         }
00061 
00062         void construct( const size_t size, const type& value = type() )
00063         {
00064             m_body.resize( size, value );
00065             m_replacement.construct( 1, size );
00066         }
00067 
00068         size_t replacement_target()
00069         {
00070             return m_replacement.target( 0 );
00071         }
00072 
00073         void touch( const size_t index )
00074         {
00075             m_replacement.touch( 0, index, index/*key_type*/ );
00076         }
00077 
00078         size_t size() const
00079         {
00080             return m_body.size();
00081         }
00082 
00083         reference operator[]( const size_t index )
00084         {
00085             return m_body[ index ];
00086         }
00087 
00088         const_reference operator[]( const size_t index ) const
00089         {
00090             return m_body[ index ];
00091         }
00092 
00093     protected:
00094         array_type  m_body;
00095         replacer m_replacement;
00096 
00097     };
00098 
00099 }   // namespace shttl
00100 
00101 #endif // #ifdef SHTTL_TABLE_H

Onikiri2に対してTue Jun 18 14:34:21 2013に生成されました。  doxygen 1.4.7