-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmaps.h
136 lines (110 loc) · 3.17 KB
/
maps.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#ifndef MAPS_H_INCLUDED
#define MAPS_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <limits.h>
#include "util_comparator.h"
#define endl puts("")
#define LEFT_CHILD 0
#define RIGHT_CHILD 1
typedef bool which_child;
enum
{
STRING_KEY = -100,
STRING_CASE_INSENSITIVE_KEY,
MODIFIED_STRING_KEY,
DEFAULT_KEY,
CHAR_KEY,
BYTE_KEY,
SHORT_KEY,
INT_KEY,
LONG_KEY,
FLOAT_KEY,
DOUBLE_KEY,
LONG_DOUBLE_KEY,
UNSIGNED_INT_KEY,
UNSIGNED_SHORT_KEY,
UNSIGNED_LONG_KEY,
LONG_LONG_KEY,
UNSIGNED_LONG_LONG_KEY
};
enum
{
STRING_VALUE = -100,
STRING_CASE_INSENSITIVE_VALUE,
MODIFIED_STRING_VALUE,
DEFAULT_VALUE,
CHAR_VALUE,
BYTE_VALUE,
SHORT_VALUE,
INT_VALUE,
LONG_VALUE,
FLOAT_VALUE,
DOUBLE_VALUE,
LONG_DOUBLE_VALUE,
UNSIGNED_INT_VALUE,
UNSIGNED_SHORT_VALUE,
UNSIGNED_LONG_VALUE,
LONG_LONG_VALUE,
UNSIGNED_LONG_LONG_VALUE
};
typedef struct private_map_data_for_library
{
void *key;
void *value;
} private_map_data_for_library;
typedef struct map_node
{
private_map_data_for_library *data;
struct map_node *ll;
struct map_node *rl;
} map_node;
typedef map_node *Map_Node;
// Map Traversal Section JIT Stands for Just In Time
typedef struct JIT_Map_Stack_Elem
{
Map_Node node;
struct JIT_Map_Stack_Elem *next_link;
} JIT_Map_Stack_Elem;
typedef JIT_Map_Stack_Elem *JIT_Map_Iterator_Stack_Top;
typedef struct
{
Map_Node next_iterator;
JIT_Map_Iterator_Stack_Top jit_top;
} JIT_Map_Iterator;
typedef void *MapTraversalDataRef;
typedef map_node map_iterator;
// Map Traversal Section
typedef struct map
{
size_t key_size;
size_t value_size;
int ctr;
long double (*key_compare)(const void *, const void *);
long double (*value_compare)(const void *, const void *);
void (*display)(const void *,const void *);
Map_Node start;
MapTraversalDataRef dataRef;
} map;
typedef map *pmap;
typedef struct
{
map (*getMap)(size_t key_size, size_t value_size, long double (*key_compare)(const void *, const void *), long double (*value_compare)(const void *, const void *), void (*display)(const void *,const void *));
bool (*addInMap)(pmap obj, const void *data,const void *value);
void (*printMap)(const map obj);
void *(*getValue)(const map obj, const void *key);
bool (*containsValue)(const map obj, const void *value);
bool (*containsKey)(const map obj, const void *key);
bool (*containsKeyWithValue)(const map obj, const void *key, const void *value);
bool (*removeKeyFromMap)(pmap obj, const void *key);
bool (*removeKeyWithValueFromMap)(pmap obj, const void *key, const void *value);
bool (*getIterator)(pmap obj, Map_Node iter);
bool (*nextIterator)(pmap obj, Map_Node iter);
void (*destroyMap)(pmap obj);
void (*clearMap)(pmap obj);
bool (*replaceValueOfKey)(pmap obj, const void *key, const void *value);
bool (*replaceOldValueOfKeyWithNewValue)(pmap obj, const void *key, const void *old_value, const void *new_value);
} GLOBAL_MAP_OBJECT;
#endif // MAPS_H_INCLUDED