33 #ifndef JM_TEMPLATE_INSTANCE_TYPE 34 #error "JM_TEMPLATE_INSTANCE_TYPE must be defined before including this file" 61 v->items = &(
v->preallocated[0]);
69 a->callbacks->free(a);
77 a->items = a->preallocated;
81 if(initSize > a->size)
87 if(
size > a->capacity) {
89 a->size = a->capacity;
99 if(size <= a->
capacity)
return a->capacity;
101 if(!newmem)
return a->capacity;
103 if(a->items != a->preallocated) a->callbacks->free((
void*)(a->items));
114 return destination->size;
118 size_t oldsize, newsize;
121 memcpy((
void*)(destination->items + oldsize), (
void*)source->items,
sizeof(
JM_TEMPLATE_INSTANCE_TYPE)*(newsize - oldsize));
122 return (newsize - oldsize);
128 if(index >= a->size)
return 0;
129 if(a->size == a->capacity) {
133 reserve = a->capacity * 2;
136 assert(a->size < a->capacity);
138 a->items[index] = item;
139 pitem = &(a->items[index]);
147 if(a->size == a->capacity) {
151 reserve = a->capacity * 2;
154 assert(a->size < a->capacity);
155 pitem = &(a->items[a->size]);
168 size_t n =v->size - index -1;
169 assert(index < v->
size);
198 qsort((
void*)v->items,
jm_vector_get_size(JM_TEMPLATE_INSTANCE_TYPE)(v),
sizeof(JM_TEMPLATE_INSTANCE_TYPE),f);
202 #define jm_vector_ptr2index(T) jm_mangle(jm_vector_ptr2index, T) 206 return (itemp - v->items);
217 return bsearch(key, v->items,
219 sizeof(JM_TEMPLATE_INSTANCE_TYPE),
227 if(f(cur, itemp) == 0)
#define jm_vector_append(T)
#define jm_vector_find_index(T)
FMILIB_EXPORT jm_callbacks * jm_get_default_callbacks(void)
Get default callbacks. The function never returns NULL.
#define jm_vector_copy(T)
#define jm_vector_foreach_c(T)
#define jm_vector_bsearch_index(T)
#define jm_vector_ptr2index(T)
#define jm_vector_free(T)
#define jm_vector_free_data(T)
#define jm_vector_bsearch(T)
#define jm_vector_alloc(T)
int(* jm_compare_ft)(const void *, const void *)
Function type for item comparison. Can be generated with jm_define_comp_f.
#define jm_vector_reserve(T)
#define JM_VECTOR_MAX_MEMORY_CHUNK
#define jm_vector_insert(T)
#define jm_vector_zero(T)
jm_vector(JM_TEMPLATE_INSTANCE_TYPE)*jm_vector_alloc(JM_TEMPLATE_INSTANCE_TYPE)(size_t size
#define jm_vector_qsort(T)
#define jm_vector_push_back(T)
#define jm_vector_get_item(T)
#define jm_vector_init(T)
jm_vector_init initializes a vector allocated on stack.
#define jm_vector_get_size(T)
jm_malloc_f malloc
Allocate non-initialized memory.
#define jm_vector_foreach(T)
#define JM_VECTOR_MINIMAL_CAPACITY
#define jm_vector_resize1(T)
#define jm_vector_remove_item(T)
#define jm_vector_find(T)
jm_vector_find functions use linear search to find items in a vector. JM_COMPAR_OP is used for compar...
The callbacks struct is sent to all the modules in the library.
#define jm_vector_get_itemp(T)
#define jm_vector_resize(T)
void jm_vector_free() JM_TEMPLATE_INSTANCE_TYPE(jm_vector(JM_TEMPLATE_INSTANCE_TYPE)*a)