CObject
CITree.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015 Brendan Bruner
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * bbruner@ualberta.ca
17  * July 12, 2016
18  */
24 #ifndef UTIL_CITREE_H_
25 #define UTIL_CITREE_H_
26 
27 #include <Class.h>
28 
29 /************************************************************************/
30 /* Error codes. */
31 /************************************************************************/
44 typedef enum
45 {
46  CITREE_OK = 0,
50 } CITreeError;
51 
52 
53 /************************************************************************/
54 /* Declare interface and vtable. */
55 /************************************************************************/
66 struct CITree
67 {
68  /* CInterface must always be first member of */
69  /* an interfaces struct .*/
70  struct CInterface interface;
71 };
72 
79 {
80  CITreeError (*push)( struct CITree*, const void*, const void* );
81  CITreeError (*pop)( struct CITree*, void* );
82  CITreeError (*peek)( struct CITree*, void* );
83  CITreeError (*get)( struct CITree*, void*, size_t );
84  CITreeError (*delete)( struct CITree*, void*, size_t );
85  CITreeError (*delete_element)( struct CITree*, void* );
86  size_t (*size)( struct CITree* );
87  size_t (*max_size)( struct CITree* );
88  void (*clear)( struct CITree* );
89 
90  /* Reserved for future expansion.
91  */
92  CITreeError (*split)( struct CITree*, void* );
93 
94  /* Reserved for future expansion.
95  */
96  CITreeError (*merge)( struct CITree*, struct CITree* );
97 };
98 
99 
100 /************************************************************************/
101 /* Class methods. */
102 /************************************************************************/
121 CITreeError CITree_Push( struct CITree* self, const void* element, const void* key );
122 
137 CITreeError CITree_Pop( struct CITree* self, void* element );
138 
154 CITreeError CITree_DeleteElement( struct CITree* self, void* element );
155 
168 CITreeError CITree_Peek( struct CITree* self, void* element );
169 
183 CITreeError CITree_Get( struct CITree* self, void* element, size_t index );
184 
199 CITreeError CITree_Delete( struct CITree* self, void* element, size_t index );
200 
211 size_t CITree_Size( struct CITree* self );
212 
222 size_t CITree_MaxSize( struct CITree* self );
223 
231 void CITree_Clear( struct CITree* self );
232 
233 #endif /* UTIL_CITREE_H_ */
size_t CITree_MaxSize(struct CITree *self)
Definition: CITree.c:91
void CITree_Clear(struct CITree *self)
Definition: CITree.c:100
CITree virtual table.
Definition: CITree.h:78
Definition: CITree.h:49
Definition: CITree.h:46
Definition: CITree.h:48
CITreeError CITree_Delete(struct CITree *self, void *element, size_t index)
Definition: CITree.c:64
Base interface.
Definition: Class.h:398
CITreeError CITree_Peek(struct CITree *self, void *element)
Definition: CITree.c:46
size_t CITree_Size(struct CITree *self)
Definition: CITree.c:82
CITreeError CITree_Push(struct CITree *self, const void *element, const void *key)
Definition: CITree.c:28
CITreeError CITree_Get(struct CITree *self, void *element, size_t index)
Definition: CITree.c:55
CITreeError
Definition: CITree.h:44
CITreeError CITree_DeleteElement(struct CITree *self, void *element)
Definition: CITree.c:73
CITreeError CITree_Pop(struct CITree *self, void *element)
Definition: CITree.c:37
Definition: CITree.h:47
Tree data structure interface.
Definition: CITree.h:66