00001
00002
00011 #ifndef ATHCONTAINERS_AUXTYPEVECTOR_H
00012 #define ATHCONTAINERS_AUXTYPEVECTOR_H
00013
00014
00015 #include "AthContainersInterfaces/IAuxTypeVector.h"
00016 #include "AthContainersInterfaces/IAuxSetOption.h"
00017 #include "AthContainers/tools/AuxDataTraits.h"
00018 #include "AthContainers/PackedContainer.h"
00019 #include "CxxUtils/override.h"
00020 #include <typeinfo>
00021 #include <vector>
00022 #include <algorithm>
00023 #include <stdint.h>
00024
00025
00026 #if __cplusplus > 201100
00027 # include <type_traits>
00028 namespace SG_STD_OR_BOOST = std;
00029 #else
00030 # include "boost/type_traits/is_base_of.hpp"
00031 # include "boost/type_traits/is_arithmetic.hpp"
00032 namespace SG_STD_OR_BOOST = boost;
00033 #endif
00034
00035
00036 namespace SG {
00037
00038
00039 class AuxDataOption;
00040
00041
00051 template <class T, class CONT = typename AuxDataTraits<T>::vector_type>
00052 class AuxTypeVector
00053 : public IAuxTypeVector
00054 {
00055 public:
00057 typedef CONT vector_type;
00058
00060 typedef typename AuxDataTraits<T>::element_type element_type;
00061
00063 typedef typename vector_type::value_type vector_value_type;
00064
00065 private:
00068 static const int SCALE = sizeof(element_type) / sizeof(vector_value_type);
00069
00070
00071 public:
00077 AuxTypeVector (size_t size, size_t capacity);
00078
00079
00083 vector_type& vec();
00084
00085
00089 virtual IAuxTypeVector* clone() const ATH_OVERRIDE;
00090
00091
00095 virtual void* toPtr() ATH_OVERRIDE;
00096
00097
00101 virtual void* toVector() ATH_OVERRIDE;
00102
00103
00110 virtual const std::type_info* objType() const ATH_OVERRIDE;
00111
00112
00116 virtual size_t size() const ATH_OVERRIDE;
00117
00118
00123 virtual void resize (size_t sz) ATH_OVERRIDE;
00124
00125
00130 virtual void reserve (size_t sz) ATH_OVERRIDE;
00131
00132
00141 virtual bool setOption (const AuxDataOption& option) ATH_OVERRIDE;
00142
00143
00166 virtual void shift (size_t pos, ptrdiff_t offs) ATH_OVERRIDE;
00167
00168
00178 virtual IAuxTypeVector* toPacked() ATH_OVERRIDE;
00179
00180
00190 static void copy (void* dst, size_t dst_index,
00191 const void* src, size_t src_index);
00192
00193
00203 static void swap (void* a, size_t aindex,
00204 void* b, size_t bindex);
00205
00206
00212 static void clear (void* dst, size_t dst_index);
00213
00214
00215 private:
00217 vector_type m_vec;
00218 };
00219
00220
00221 }
00222
00223
00224 #include "AthContainers/tools/AuxTypeVector.icc"
00225
00226
00227 #endif // not ATHCONTAINERS_AUXTYPEVECTOR_H