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 
00037 
00038 
00039 
00045 #ifndef SIZE_BASE_HPP
00046 #define SIZE_BASE_HPP
00047 
00048 namespace pb_assoc
00049 {
00050 
00051   namespace detail
00052   {
00053 
00054     template<typename Size_Type, bool Hold_Size>
00055     class size_base;
00056 
00057 #define PB_ASSOC_CLASS_T_DEC \
00058     template<typename Size_Type>
00059 
00060 #define PB_ASSOC_CLASS_C_DEC \
00061     size_base< \
00062         Size_Type, \
00063         true>
00064 
00065     template<typename Size_Type>
00066     class size_base<
00067       Size_Type,
00068       true>
00069     {
00070     protected:
00071       typedef Size_Type size_type;
00072 
00073     protected:
00074       inline
00075       size_base();
00076 
00077       inline void
00078       swap(PB_ASSOC_CLASS_C_DEC& r_other);
00079 
00080       inline void
00081       set_size(size_type size);
00082 
00083       inline size_type
00084       get_size() const;
00085 
00086     private:
00087       size_type m_size;
00088     };
00089 
00090     PB_ASSOC_CLASS_T_DEC
00091     PB_ASSOC_CLASS_C_DEC::
00092     size_base() :
00093       m_size(0)
00094     { }
00095 
00096     PB_ASSOC_CLASS_T_DEC
00097     inline void
00098     PB_ASSOC_CLASS_C_DEC::
00099     set_size(size_type size)
00100     {
00101       m_size = size;
00102     }
00103 
00104     PB_ASSOC_CLASS_T_DEC
00105     inline typename PB_ASSOC_CLASS_C_DEC::size_type
00106     PB_ASSOC_CLASS_C_DEC::
00107     get_size() const
00108     {
00109       return (m_size);
00110     }
00111 
00112     PB_ASSOC_CLASS_T_DEC
00113     inline void
00114     PB_ASSOC_CLASS_C_DEC::
00115     swap(PB_ASSOC_CLASS_C_DEC& r_other)
00116     {
00117       std::swap(m_size, r_other.m_size);
00118     }
00119 
00120 #undef PB_ASSOC_CLASS_T_DEC
00121 
00122 #undef PB_ASSOC_CLASS_C_DEC
00123 
00124 #define PB_ASSOC_CLASS_T_DEC \
00125     template<typename Size_Type>
00126 
00127 #define PB_ASSOC_CLASS_C_DEC \
00128     size_base< \
00129         Size_Type, \
00130         false>
00131 
00132     template<typename Size_Type>
00133     class size_base<
00134       Size_Type,
00135       false>
00136     {
00137     protected:
00138       typedef Size_Type size_type;
00139 
00140     protected:
00141       inline void
00142       swap(PB_ASSOC_CLASS_C_DEC& r_other);
00143 
00144       inline void
00145       set_size(size_type size);
00146     };
00147 
00148     PB_ASSOC_CLASS_T_DEC
00149     inline void
00150     PB_ASSOC_CLASS_C_DEC::
00151     swap(PB_ASSOC_CLASS_C_DEC& )
00152     { }
00153 
00154     PB_ASSOC_CLASS_T_DEC
00155     inline void
00156     PB_ASSOC_CLASS_C_DEC::
00157     set_size(size_type )
00158     {
00159       
00160     }
00161 
00162 #undef PB_ASSOC_CLASS_T_DEC
00163 
00164 #undef PB_ASSOC_CLASS_C_DEC
00165 
00166   } 
00167 
00168 } 
00169 
00170 #endif // #ifndef SIZE_BASE_HPP