29
29
typedef struct db_table_tree {
30
Eterm owner; /* Pid of the creator */
31
Eterm the_name; /* an atom */
32
Eterm id; /* atom | integer */
33
Uint32 status; /* bit masks defining type etc */
34
int slot; /* slot in db_tables */
35
int keypos; /* defaults to 1 */
36
int nitems; /* Total number of items */
37
Uint memory; /* Total memory size */
38
int kept_items; /* Always empty for trees */
39
Uint megasec,sec,microsec; /* Last fixation time */
40
DbFixation *fixations; /* List of processes who have fixed
32
/* Tree-specific fields */
43
33
TreeDbTerm *root; /* The tree root */
44
34
TreeDbTerm **stack; /* The first/next stack */
45
35
Uint stack_pos; /* Current position on stack */
46
36
Uint slot_pos; /* Current "slot" */
37
Uint deletion; /* Being deleted */
51
42
** table types. The process is always an [in out] parameter.
53
44
void db_initialize_tree(void);
54
int db_create_tree(Process *p, DbTableTree *tb /* [in out] */);
55
int db_first_tree(Process *p, DbTableTree *tb /* [in out] */,
56
Eterm *ret /* [out] */);
57
int db_next_tree(Process *p, DbTableTree *tb /* [in out] */,
59
Eterm *ret /* [out] */);
60
int db_last_tree(Process *p, DbTableTree *tb /* [in out] */,
61
Eterm *ret /* [out] */);
62
int db_prev_tree(Process *p, DbTableTree *tb /* [in out] */,
64
Eterm *ret /* [out] */);
65
int db_update_counter_tree(Process *p, DbTableTree *tb /* [in out] */,
67
Eterm incr, /* [in] */
69
int counterpos, /* [in] */
70
Eterm *ret /* [out] */);
71
int db_put_tree(Process *p, DbTableTree *tb /* [in out] */,
73
Eterm *ret /* [out] */);
74
int db_get_tree(Process *p, DbTableTree *tb /* [in out] */,
76
Eterm *ret /* [out] */);
77
int db_member_tree(Process *p, DbTableTree *tb /* [in out] */,
79
Eterm *ret /* [out] */);
80
int db_get_element_tree(Process *p, DbTableTree *tb /* [in out] */,
83
Eterm *ret /* [out] */);
84
int db_erase_tree(Process *p, DbTableTree *tb /* [in out] */,
86
Eterm *ret /* [out] */);
87
int db_erase_object_tree(Process *p, DbTableTree *tb /* [in out] */,
88
Eterm object /* [in] */,
89
Eterm *ret /* [out] */);
90
int db_slot_tree(Process *p, DbTableTree *tb /* [in out] */,
91
Eterm slot_term /* [in] */,
92
Eterm *ret /* [out] */);
93
int db_select_tree(Process *p, DbTableTree *tb /* [in out] */,
94
Eterm pattern /* [in] */,
95
int reversed /* [in] */,
96
Eterm *ret /* [out] */);
97
int db_select_count_tree(Process *p, DbTableTree *tb /* [in out] */,
98
Eterm pattern /* [in] */,
99
Eterm *ret /* [out] */);
100
int db_select_chunk_tree(Process *p, DbTableTree *tb /* [in out] */,
101
Eterm pattern /* [in] */,
102
Sint chunk_size /* [in] */,
103
int reversed /* [in] */,
104
Eterm *ret /* [out] */);
105
int db_select_tree_continue(Process *p,
106
DbTableTree *tb /* [in out] */,
107
Eterm continuation /* [in] */,
108
Eterm *ret /* [out] */);
109
int db_select_count_tree_continue(Process *p,
110
DbTableTree *tb /* [in out] */,
111
Eterm continuation /* [in] */,
112
Eterm *ret /* [out] */);
113
int db_select_delete_tree(Process *p, DbTableTree *tb /* [in out] */,
114
Eterm pattern /* [in] */,
115
Eterm *ret /* [out] */);
116
int db_select_delete_continue_tree(Process *p,
117
DbTableTree *tb /* [in out] */,
118
Eterm continuation /* [in] */,
120
void db_print_tree(CIO fd /* [in] */,
122
DbTableTree *tb /* [in] */);
123
void free_tree_table(DbTableTree *tb /* [in out] */);
125
void erts_db_tree_foreach_offheap(DbTableTree *tab,
126
void (*)(ErlOffHeap *, void *),
130
void db_check_table_tree(DbTableTree *tb);
46
int db_create_tree(Process *p, DbTable *tbl);
133
48
#endif /* _DB_TREE_H */