forked from orangeduck/Cello
/
Array+.h
70 lines (56 loc) · 1.84 KB
/
Array+.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
/*
** == Array ==
**
** Container of data objects
**
** + Does not contains references
** + Allocates space for data objects
** + Uses "Assign" to set contents
*/
#ifndef ArrayPlus_h
#define ArrayPlus_h
#include "Prelude+.h"
#include "Type+.h"
module Array;
data {
var type;
var item_type;
int num_items;
int num_slots;
var items;
} ArrayData;
/** Array_New(var self, var type, int count, ... items) */
var Array_New(var self, va_list* args);
var Array_Delete(var self);
void Array_Assign(var self, var obj);
var Array_Copy(var self);
var Array_Eq(var self, var obj);
int Array_Len(var self);
void Array_Clear(var self);
var Array_Contains(var self, var obj);
void Array_Discard(var self, var obj);
void Array_Push_Back(var self, var obj);
void Array_Push_Front(var self, var obj);
void Array_Push_At(var self, var obj, int i);
var Array_Pop_Back(var self);
var Array_Pop_Front(var self);
var Array_Pop_At(var self, int i);
var Array_At(var self, int i);
void Array_Set(var self, int i, var obj);
var Array_Iter_Start(var self);
var Array_Iter_End(var self);
var Array_Iter_Next(var self, var curr);
void Array_Reverse(var self);
void Array_Sort(var self);
instance(Array, New) = { sizeof(ArrayData), Array_New, Array_Delete };
instance(Array, Assign) = { Array_Assign };
instance(Array, Copy) = { Array_Copy };
instance(Array, Eq) = { Array_Eq };
instance(Array, Collection) = { Array_Len, Array_Clear, Array_Contains, Array_Discard };
instance(Array, Push) = { Array_Push_Back, Array_Push_At, Array_Push_Back, Array_Push_Front, Array_Pop_Back, Array_Pop_At, Array_Pop_Back, Array_Pop_Front };
instance(Array, At) = { Array_At, Array_Set };
instance(Array, Iter) = { Array_Iter_Start, Array_Iter_End, Array_Iter_Next };
instance(Array, Reverse) = { Array_Reverse };
instance(Array, Sort) = { Array_Sort };
instance(Array, Append) = { Array_Push_Back };
#endif