Toggle navigation
ivorium
iv_components
Example project
GitHub
Main Page
Modules
Classes
Files
File List
File Members
ivorium_model
ModelTools
Sub.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <array>
4
#include <vector>
5
#include <
ivorium_core/ivorium_core.hpp
>
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
27
class
SubDirectory
28
{
29
public
:
30
size_t
next
;
31
};
32
35
class
Sub_StructorFunctions
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
"