27 #ifndef DOXYGEN_SHOULD_SKIP_THIS
29 template<
class T>
struct CSetNode
55 CSet(int32_t size=41, int32_t reserved=128,
bool tracable=
true)
65 hash_array=(CSetNode<T>**) calloc(size,
sizeof(CSetNode<T>*));
67 for (int32_t i=0; i<size; i++)
103 virtual const char*
get_name()
const {
return "Set"; }
109 void add(
const T& element)
111 int32_t index=hash(element);
112 if (chain_search(index, element)==NULL)
114 insert_key(index, element);
125 int32_t index=hash(element);
126 if (chain_search(index, element)!=NULL)
136 void remove(
const T& element)
138 int32_t index=hash(element);
139 CSetNode<T>* result=chain_search(index, element);
143 delete_key(index, result);
155 int32_t index=hash(element);
156 CSetNode<T>* result=chain_search(index, element);
159 return result->index;
218 int32_t hash(
const T& element)
224 bool is_free(CSetNode<T>*
node)
226 if (node->free==
true)
233 CSetNode<T>* chain_search(int32_t index,
const T& element)
245 if (current->element==element)
248 current=current->right;
250 }
while (current!=NULL);
257 void insert_key(int32_t index,
const T& element)
266 new_node=SG_CALLOC(CSetNode<T>, 1);
268 new_node=(CSetNode<T>*) calloc(1,
sizeof(CSetNode<T>));
281 free_index=new_node->index;
284 new_node->index=new_index;
285 new_node->free=false;
286 new_node->element=element;
288 new_node->right=NULL;
305 void delete_key(int32_t index, CSetNode<T>* node)
312 if (node->right!=NULL)
313 node->right->left = node->left;
315 if (node->left!=NULL)
316 node->left->right = node->right;
bool contains(const T &element)
T get_element(int32_t index) const
int32_t index_of(const T &element)
bool append_element(T element)
node< P > new_node(const P &p)
DynArray< CSetNode< T > * > * array
CSetNode< T > ** get_array()
int32_t get_num_elements() const
CSet(int32_t size=41, int32_t reserved=128, bool tracable=true)
static uint32_t MurmurHash3(uint8_t *data, int32_t len, uint32_t seed)
Class SGObject is the base class of all shogun objects.
the class CSet, a set based on the hash-table. w: http://en.wikipedia.org/wiki/Hash_table ...
CSetNode< T > ** hash_array
virtual const char * get_name() const
Template Dynamic array class that creates an array that can be used like a list or an array...
CSetNode< T > * get_node_ptr(int32_t index)
T * get_element_ptr(int32_t index)
all of classes and functions are contained in the shogun namespace
int32_t get_num_elements() const
void add(const T &element)
int32_t get_array_size() const