Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
TypeContainerFunctions.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef TYPECONTAINER_FUNCTIONS_H
7#define TYPECONTAINER_FUNCTIONS_H
8
9/*
10 * Here you'll find a list of helper functions to make
11 * the TypeContainer usefull. Without it, its hard
12 * to access or mutate the container.
13 */
14
15#include "Define.h"
16#include "Dynamic/TypeList.h"
17#include <map>
18
19namespace Skyfire
20{
21 /* ContainerMapList Helpers */
22 // count functions
23 template<class SPECIFIC_TYPE> size_t Count(const ContainerMapList<SPECIFIC_TYPE>& elements, SPECIFIC_TYPE* /*fake*/)
24 {
25 return elements._element.getSize();
26 }
27
28 template<class SPECIFIC_TYPE> size_t Count(const ContainerMapList<TypeNull>&/*elements*/, SPECIFIC_TYPE* /*fake*/)
29 {
30 return 0;
31 }
32
33 template<class SPECIFIC_TYPE, class T> size_t Count(const ContainerMapList<T>&/*elements*/, SPECIFIC_TYPE* /*fake*/)
34 {
35 return 0;
36 }
37
38 template<class SPECIFIC_TYPE, class T> size_t Count(const ContainerMapList<TypeList<SPECIFIC_TYPE, T> >& elements, SPECIFIC_TYPE* fake)
39 {
40 return Count(elements._elements, fake);
41 }
42
43 template<class SPECIFIC_TYPE, class H, class T> size_t Count(const ContainerMapList<TypeList<H, T> >& elements, SPECIFIC_TYPE* fake)
44 {
45 return Count(elements._TailElements, fake);
46 }
47
48 // non-const insert functions
49 template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE>& elements, SPECIFIC_TYPE* obj)
50 {
51 //elements._element[hdl] = obj;
52 obj->AddToGrid(elements._element);
53 return obj;
54 }
55
56 template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Insert(ContainerMapList<TypeNull>&/*elements*/, SPECIFIC_TYPE* /*obj*/)
57 {
58 return NULL;
59 }
60
61 // this is a missed
62 template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Insert(ContainerMapList<T>&/*elements*/, SPECIFIC_TYPE* /*obj*/)
63 {
64 return NULL; // a missed
65 }
66
67 // Recursion
68 template<class SPECIFIC_TYPE, class H, class T> SPECIFIC_TYPE* Insert(ContainerMapList<TypeList<H, T> >& elements, SPECIFIC_TYPE* obj)
69 {
70 SPECIFIC_TYPE* t = Insert(elements._elements, obj);
71 return (t != NULL ? t : Insert(elements._TailElements, obj));
72 }
73
75 //template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<SPECIFIC_TYPE> & /*elements*/, SPECIFIC_TYPE *obj)
76 //{
77 // obj->GetGridRef().unlink();
78 // return obj;
79 //}
80
81 //template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
82 //{
83 // return NULL;
84 //}
85
87 //template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Remove(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
88 //{
89 // return NULL; // a missed
90 //}
91
92 //template<class SPECIFIC_TYPE, class T, class H> SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> > &elements, SPECIFIC_TYPE *obj)
93 //{
94 // // The head element is bad
95 // SPECIFIC_TYPE* t = Remove(elements._elements, obj);
96 // return ( t != NULL ? t : Remove(elements._TailElements, obj) );
97 //}
98}
99#endif
100
size_t Count(const ContainerMapList< SPECIFIC_TYPE > &elements, SPECIFIC_TYPE *)
SPECIFIC_TYPE * Insert(ContainerMapList< SPECIFIC_TYPE > &elements, SPECIFIC_TYPE *obj)
GridRefManager< OBJECT > _element