Sub.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 #include <vector>
6 
7 namespace iv
8 {
9 
12 template< class Type, class SubType >
13 class SubId
14 {
15 public:
16  SubId();
17  SubId( SubId const & ) = delete;
18  size_t idx() const;
19  size_t idx_count() const;
20 
21 private:
22  size_t _idx;
23 };
24 
28 {
29 public:
30  size_t next;
31 };
32 
36 {
37 public:
38  size_t sizeof_v;
39  size_t alignof_v;
40  void * (*copy_new) ( void * src );
41  void * (*copy_inplace) ( void * place, void * src );
42  void (*destroy_inplace) ( void * self );
43  void (*destroy_delete) ( void * self );
44  void (*assign_copy) ( void * self, void * src );
45  void (*assign_default) ( void * self );
46  //void * (*move_new) ( void * src );
47  //void * (*move_inplace) ( void * place, void * src );
48  //void (*assign_move) ( void * self, void * src );
49 };
50 
90 template< class Type, size_t LocalItems = 0, size_t LocalStorage = 0 >
91 class Sub
92 {
93 public:
94  Sub();
95  ~Sub();
96  Sub( Sub const & src );
97  Sub & operator=( Sub const & src );
98 
99  void clear();
100 
101  template< class SubType >
102  SubType & operator[]( SubId< Type, SubType > const & id );
103 
104 private:
105  struct S
106  {
107  S() : inst( nullptr ), functions( nullptr ), dynamic( false ){}
108 
109  void * inst;
110  Sub_StructorFunctions * functions;
111  bool dynamic;
112  };
113 
114 private:
115  S * getS( size_t idx );
116  void copy( size_t idx, S const & s );
117 
118 private:
119  std::array< S, LocalItems > dir_local;
120  std::array< char, LocalStorage > mem_local;
121  std::vector< S > dir_dynamic;
122  size_t static_mem_used;
123 };
124 
125 }
126 
127 #include "Sub.inl"