File: genvector_impl.h

package info (click to toggle)
librnd 4.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,812 kB
  • sloc: ansic: 126,990; sh: 2,602; makefile: 2,145; awk: 7
file content (75 lines) | stat: -rw-r--r-- 2,636 bytes parent folder | download | duplicates (7)
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
#define GVTTYPE GVT(t)

typedef struct GVT(s) GVTTYPE;


struct GVT(s) {
	GVT_SIZE_TYPE used, alloced;
	GVT_ELEM_TYPE *array;
#ifdef GVT_INIT_ELEM_FUNC
	void (*init_elem)(GVTTYPE *vect, GVT_ELEM_TYPE *elem);
#endif
#ifdef GVT_ELEM_CONSTRUCTOR
	int (*elem_constructor)(GVTTYPE *vect, GVT_ELEM_TYPE *elem);
#endif
#ifdef GVT_ELEM_DESTRUCTOR
	void (*elem_destructor)(GVTTYPE *vect, GVT_ELEM_TYPE *elem);
#endif
#ifdef GVT_ELEM_COPY
	int (*elem_copy)(GVTTYPE *dst_vect, GVT_ELEM_TYPE *dst, const GVT_ELEM_TYPE *src);
#endif
#ifdef GVT_USER_FIELDS
	GVT_USER_FIELDS
#endif
#ifdef GVT_OPTIONAL_NO_REALLOC
	char no_realloc;
#endif
};

/* Append is possible only if we can determine the length of the input string,
   either because there's an existing strlen() or because we can count
   characters looking for a terminator */
#ifdef GVT_STRLEN
#	define GVT_NEED_APPEND_ARRAY
#else
#	ifdef GVT_TERM
#		define GVT_NEED_APPEND_ARRAY
#	endif
#endif

GVT_FUNC void GVT(init)(GVTTYPE *vect);
GVT_FUNC int GVT(uninit)(GVTTYPE *vect);

GVT_FUNC GVT_SIZE_TYPE GVT(len)(GVTTYPE *vect);
GVT_FUNC int GVT(in_bound)(GVTTYPE *vect, GVT_SIZE_TYPE idx);

GVT_FUNC GVT_ELEM_TYPE *GVT(get)(GVTTYPE *vect, GVT_SIZE_TYPE idx, int alloc);
GVT_FUNC int GVT(set)(GVTTYPE *vect, GVT_SIZE_TYPE idx, GVT_ELEM_TYPE src);
GVT_FUNC int GVT(set_ptr)(GVTTYPE *vect, GVT_SIZE_TYPE idx, GVT_ELEM_TYPE *src);

GVT_FUNC int GVT(resize)(GVTTYPE *vect, GVT_SIZE_TYPE new_size);
GVT_FUNC int GVT(truncate)(GVTTYPE *vect, GVT_SIZE_TYPE len);
GVT_FUNC int GVT(enlarge)(GVTTYPE *vect, GVT_SIZE_TYPE idx);

GVT_FUNC int GVT(append)(GVTTYPE *vect, GVT_ELEM_TYPE src);
GVT_FUNC int GVT(append_len)(GVTTYPE *vect, const GVT_ELEM_TYPE *src, GVT_SIZE_TYPE len);
GVT_FUNC int GVT(concat)(GVTTYPE *dst, const GVTTYPE *src);
GVT_FUNC int GVT(copy)(GVTTYPE *dst_vect, GVT_SIZE_TYPE dst_idx, GVTTYPE *src_vect, GVT_SIZE_TYPE src_idx, GVT_SIZE_TYPE num_elems);
GVT_FUNC GVT_ELEM_TYPE *GVT(alloc_append)(GVTTYPE *vect, int num_elems);

GVT_FUNC int GVT(remove)(GVTTYPE *vect, GVT_SIZE_TYPE from_idx, GVT_SIZE_TYPE num_elems);
GVT_FUNC int GVT(remove_bw)(GVTTYPE *vect, GVT_SIZE_TYPE to_idx, GVT_SIZE_TYPE num_elems);

/* Insert num_elems _before_ from_idx */
GVT_FUNC GVT_ELEM_TYPE *GVT(alloc_insert)(GVTTYPE *vect, GVT_SIZE_TYPE from_idx, GVT_SIZE_TYPE num_elems);

/* Insert src/len into vect at from_idx; enlarges vect by len. Returns pointer
   to from_idx. */
GVT_FUNC GVT_ELEM_TYPE *GVT(insert_len)(GVTTYPE *vect, GVT_SIZE_TYPE from_idx, GVT_ELEM_TYPE *src, GVT_SIZE_TYPE len);


#ifdef GVT_NEED_APPEND_ARRAY
GVT_FUNC int GVT(append_array)(GVTTYPE *vect, const GVT_ELEM_TYPE *src);
#endif