Include dependency graph for vlc_arrays.h:

Go to the source code of this file.
Data Structures | |
| struct | vlc_array_t |
| struct | vlc_dictionary_entry_t |
| struct | vlc_dictionary_t |
Defines | |
| #define | VLCCVP |
| Simple dynamic array handling. | |
| #define | INSERT_ELEM(p_ar, i_oldsize, i_pos, elem) |
| #define | REMOVE_ELEM(p_ar, i_oldsize, i_pos) |
| #define | TAB_INIT(count, tab) |
| #define | TAB_CLEAN(count, tab) |
| #define | TAB_APPEND_CAST(cast, count, tab, p) |
| #define | TAB_APPEND(count, tab, p) TAB_APPEND_CAST( , count, tab, p ) |
| #define | TAB_APPEND_CPP(type, count, tab, p) TAB_APPEND_CAST( (type**), count, tab, p ) |
| #define | TAB_FIND(count, tab, p, index) |
| #define | TAB_REMOVE(count, tab, p) |
| #define | TAB_INSERT_CAST(cast, count, tab, p, index) |
| #define | TAB_INSERT(count, tab, p, index) TAB_INSERT_CAST( , count, tab, p, index ) |
| #define | BSEARCH(entries, count, elem, zetype, key, answer) |
| Binary search in a sorted array. | |
| #define | _ARRAY_ALLOC(array, newsize) |
| #define | _ARRAY_GROW1(array) |
| #define | _ARRAY_GROW(array, additional) |
| #define | _ARRAY_SHRINK(array) |
| #define | ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
| #define | DECL_ARRAY(type) |
| #define | TYPEDEF_ARRAY(type, name) typedef DECL_ARRAY(type) name; |
| #define | ARRAY_INIT(array) |
| #define | ARRAY_RESET(array) |
| #define | ARRAY_APPEND(array, elem) |
| #define | ARRAY_INSERT(array, elem, pos) |
| #define | ARRAY_REMOVE(array, pos) |
| #define | ARRAY_VAL(array, pos) array.p_elems[pos] |
| #define | ARRAY_BSEARCH(array, elem, zetype, key, answer) BSEARCH( array.p_elems, array.i_size, elem, zetype, key, answer) |
| #define | FOREACH_ARRAY(item, array) |
| #define | FOREACH_END() } } |
Functions | |
| static void | vlc_array_init (vlc_array_t *p_array) |
| static void | vlc_array_clear (vlc_array_t *p_array) |
| static vlc_array_t * | vlc_array_new (void) |
| static void | vlc_array_destroy (vlc_array_t *p_array) |
| static int | vlc_array_count (vlc_array_t *p_array) |
| static void * | vlc_array_item_at_index (vlc_array_t *p_array, int i_index) |
| static int | vlc_array_index_of_item (vlc_array_t *p_array, void *item) |
| static void | vlc_array_insert (vlc_array_t *p_array, void *p_elem, int i_index) |
| static void | vlc_array_append (vlc_array_t *p_array, void *p_elem) |
| static void | vlc_array_remove (vlc_array_t *p_array, int i_index) |
| static uint64_t | DictHash (const char *psz_string, int hashsize) |
| static void | vlc_dictionary_init (vlc_dictionary_t *p_dict, int i_size) |
| static void | vlc_dictionary_clear (vlc_dictionary_t *p_dict) |
| static void * | vlc_dictionary_value_for_key (const vlc_dictionary_t *p_dict, const char *psz_key) |
| static int | vlc_dictionary_keys_count (const vlc_dictionary_t *p_dict) |
| static char ** | vlc_dictionary_all_keys (const vlc_dictionary_t *p_dict) |
| static void | __vlc_dictionary_insert (vlc_dictionary_t *p_dict, const char *psz_key, void *p_value, bool rebuild) |
| static void | vlc_dictionary_insert (vlc_dictionary_t *p_dict, const char *psz_key, void *p_value) |
| static void | vlc_dictionary_remove_value_for_key (const vlc_dictionary_t *p_dict, const char *psz_key) |
Variables | |
| static void *const | kVLCDictionaryNotFound = NULL |
| #define _ARRAY_ALLOC | ( | array, | |||
| newsize | ) |
Value:
{ \
array.i_alloc = newsize; \
array.p_elems = VLCCVP realloc( array.p_elems, array.i_alloc * \
sizeof(*array.p_elems) ); \
}
| #define _ARRAY_GROW | ( | array, | |||
| additional | ) |
Value:
{ \
int i_first = array.i_alloc; \
while( array.i_alloc - i_first < additional ) \
{ \
if( array.i_alloc < 10 ) \
_ARRAY_ALLOC(array, 10 ) \
else if( array.i_alloc == array.i_size ) \
_ARRAY_ALLOC(array, (int)(array.i_alloc * 1.5) ) \
else break; \
} \
}
| #define _ARRAY_GROW1 | ( | array | ) |
Value:
{ \
if( array.i_alloc < 10 ) \
_ARRAY_ALLOC(array, 10 ) \
else if( array.i_alloc == array.i_size ) \
_ARRAY_ALLOC(array, (int)(array.i_alloc * 1.5) ) \
}
| #define _ARRAY_SHRINK | ( | array | ) |
Value:
{ \
if( array.i_size > 10 && array.i_size < (int)(array.i_alloc / 1.5) ) { \
_ARRAY_ALLOC(array, array.i_size + 5); \
} \
}
| #define ARRAY_APPEND | ( | array, | |||
| elem | ) |
Value:
{ \
_ARRAY_GROW1(array); \
array.p_elems[array.i_size] = elem; \
array.i_size++; \
}
| #define ARRAY_BSEARCH | ( | array, | |||
| elem, | |||||
| zetype, | |||||
| key, | |||||
| answer | ) | BSEARCH( array.p_elems, array.i_size, elem, zetype, key, answer) |
| #define ARRAY_INIT | ( | array | ) |
Value:
array.i_alloc = 0; \
array.i_size = 0; \
array.p_elems = NULL;
| #define ARRAY_INSERT | ( | array, | |||
| elem, | |||||
| pos | ) |
Value:
{ \
_ARRAY_GROW1(array); \
if( array.i_size - pos ) { \
memmove( array.p_elems + pos + 1, array.p_elems + pos, \
(array.i_size-pos) * sizeof(*array.p_elems) ); \
} \
array.p_elems[pos] = elem; \
array.i_size++; \
}
| #define ARRAY_REMOVE | ( | array, | |||
| pos | ) |
Value:
{ \
if( array.i_size - (pos) - 1 ) \
{ \
memmove( array.p_elems + pos, array.p_elems + pos + 1, \
( array.i_size - pos - 1 ) *sizeof(*array.p_elems) ); \
} \
array.i_size--; \
_ARRAY_SHRINK(array); \
}
| #define ARRAY_RESET | ( | array | ) |
Value:
array.i_alloc = 0; \
array.i_size = 0; \
free( array.p_elems ); array.p_elems = NULL;
| #define ARRAY_SIZE | ( | x | ) | (sizeof(x) / sizeof((x)[0])) |
| #define ARRAY_VAL | ( | array, | |||
| pos | ) | array.p_elems[pos] |
| #define BSEARCH | ( | entries, | |||
| count, | |||||
| elem, | |||||
| zetype, | |||||
| key, | |||||
| answer | ) |
Value:
do { \ int low = 0, high = count - 1; \ answer = -1; \ while( low <= high ) {\ int mid = (low + high ) / 2; /* Just don't care about 2^30 tables */ \ zetype mid_val = entries[mid] elem;\ if( mid_val < key ) \ low = mid + 1; \ else if ( mid_val > key ) \ high = mid -1; \ else \ { \ answer = mid; break; \ }\ } \ } while(0)
The key must be comparable by < and >
| entries | array of entries | |
| count | number of entries | |
| elem | key to check within an entry (like .id, or ->i_id) | |
| zetype | type of the key | |
| key | value of the key | |
| answer | index of answer within the array. -1 if not found |
| #define DECL_ARRAY | ( | type | ) |
Value:
struct { \ int i_alloc; \ int i_size; \ type *p_elems; \ }
| #define FOREACH_ARRAY | ( | item, | |||
| array | ) |
Value:
{ \
int fe_idx; \
for( fe_idx = 0 ; fe_idx < array.i_size ; fe_idx++ ) \
{ \
item = array.p_elems[fe_idx];
| #define FOREACH_END | ( | ) | } } |
| #define INSERT_ELEM | ( | p_ar, | |||
| i_oldsize, | |||||
| i_pos, | |||||
| elem | ) |
Value:
do \ { \ if( !i_oldsize ) (p_ar) = NULL; \ (p_ar) = VLCCVP realloc( p_ar, ((i_oldsize) + 1) * sizeof(*(p_ar)) ); \ if( (i_oldsize) - (i_pos) ) \ { \ memmove( (p_ar) + (i_pos) + 1, (p_ar) + (i_pos), \ ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \ } \ (p_ar)[i_pos] = elem; \ (i_oldsize)++; \ } \ while( 0 )
| #define REMOVE_ELEM | ( | p_ar, | |||
| i_oldsize, | |||||
| i_pos | ) |
Value:
do \ { \ if( (i_oldsize) - (i_pos) - 1 ) \ { \ memmove( (p_ar) + (i_pos), \ (p_ar) + (i_pos) + 1, \ ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \ } \ if( i_oldsize > 1 ) \ { \ (p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) ); \ } \ else \ { \ free( p_ar ); \ (p_ar) = NULL; \ } \ (i_oldsize)--; \ } \ while( 0 )
| #define TAB_APPEND | ( | count, | |||
| tab, | |||||
| p | ) | TAB_APPEND_CAST( , count, tab, p ) |
| #define TAB_APPEND_CAST | ( | cast, | |||
| count, | |||||
| tab, | |||||
| p | ) |
Value:
do { \ if( (count) > 0 ) \ (tab) = cast realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ else \ (tab) = cast malloc( sizeof( void ** ) ); \ (tab)[count] = (p); \ (count)++; \ } while(0)
| #define TAB_APPEND_CPP | ( | type, | |||
| count, | |||||
| tab, | |||||
| p | ) | TAB_APPEND_CAST( (type**), count, tab, p ) |
| #define TAB_CLEAN | ( | count, | |||
| tab | ) |
Value:
do { \ free( tab ); \ (count)= 0; \ (tab)= NULL; \ } while(0)
| #define TAB_FIND | ( | count, | |||
| tab, | |||||
| p, | |||||
| index | ) |
Value:
do { \ int _i_; \ (index) = -1; \ for( _i_ = 0; _i_ < (count); _i_++ ) \ { \ if( (tab)[_i_] == (p) ) \ { \ (index) = _i_; \ break; \ } \ } \ } while(0)
| #define TAB_INIT | ( | count, | |||
| tab | ) |
Value:
do { \ (count) = 0; \ (tab) = NULL; \ } while(0)
| #define TAB_INSERT | ( | count, | |||
| tab, | |||||
| p, | |||||
| index | ) | TAB_INSERT_CAST( , count, tab, p, index ) |
| #define TAB_INSERT_CAST | ( | cast, | |||
| count, | |||||
| tab, | |||||
| p, | |||||
| index | ) |
Value:
do { \ if( (count) > 0 ) \ (tab) = cast realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ else \ (tab) = cast malloc( sizeof( void ** ) ); \ if( (count) - (index) > 0 ) \ memmove( (void**)(tab) + (index) + 1, \ (void**)(tab) + (index), \ ((count) - (index)) * sizeof(*(tab)) );\ (tab)[(index)] = (p); \ (count)++; \ } while(0)
| #define TAB_REMOVE | ( | count, | |||
| tab, | |||||
| p | ) |
Value:
do { \ int _i_index_; \ TAB_FIND( count, tab, p, _i_index_ ); \ if( _i_index_ >= 0 ) \ { \ if( (count) > 1 ) \ { \ memmove( ((void**)(tab) + _i_index_), \ ((void**)(tab) + _i_index_+1), \ ( (count) - _i_index_ - 1 ) * sizeof( void* ) );\ } \ (count)--; \ if( (count) == 0 ) \ { \ free( tab ); \ (tab) = NULL; \ } \ } \ } while(0)
| #define TYPEDEF_ARRAY | ( | type, | |||
| name | ) | typedef DECL_ARRAY(type) name; |
| #define VLCCVP |
Simple dynamic array handling.
Array is realloced at each insert/removal
| static void __vlc_dictionary_insert | ( | vlc_dictionary_t * | p_dict, | |
| const char * | psz_key, | |||
| void * | p_value, | |||
| bool | rebuild | |||
| ) | [inline, static] |
| static uint64_t DictHash | ( | const char * | psz_string, | |
| int | hashsize | |||
| ) | [inline, static] |
| static void vlc_array_append | ( | vlc_array_t * | p_array, | |
| void * | p_elem | |||
| ) | [inline, static] |
| static void vlc_array_clear | ( | vlc_array_t * | p_array | ) | [inline, static] |
| static int vlc_array_count | ( | vlc_array_t * | p_array | ) | [inline, static] |
| static void vlc_array_destroy | ( | vlc_array_t * | p_array | ) | [inline, static] |
| static int vlc_array_index_of_item | ( | vlc_array_t * | p_array, | |
| void * | item | |||
| ) | [inline, static] |
| static void vlc_array_init | ( | vlc_array_t * | p_array | ) | [inline, static] |
| static void vlc_array_insert | ( | vlc_array_t * | p_array, | |
| void * | p_elem, | |||
| int | i_index | |||
| ) | [inline, static] |
| static void* vlc_array_item_at_index | ( | vlc_array_t * | p_array, | |
| int | i_index | |||
| ) | [inline, static] |
| static vlc_array_t* vlc_array_new | ( | void | ) | [inline, static] |
| static void vlc_array_remove | ( | vlc_array_t * | p_array, | |
| int | i_index | |||
| ) | [inline, static] |
| static char** vlc_dictionary_all_keys | ( | const vlc_dictionary_t * | p_dict | ) | [inline, static] |
| static void vlc_dictionary_clear | ( | vlc_dictionary_t * | p_dict | ) | [inline, static] |
| static void vlc_dictionary_init | ( | vlc_dictionary_t * | p_dict, | |
| int | i_size | |||
| ) | [inline, static] |
| static void vlc_dictionary_insert | ( | vlc_dictionary_t * | p_dict, | |
| const char * | psz_key, | |||
| void * | p_value | |||
| ) | [inline, static] |
| static int vlc_dictionary_keys_count | ( | const vlc_dictionary_t * | p_dict | ) | [inline, static] |
| static void vlc_dictionary_remove_value_for_key | ( | const vlc_dictionary_t * | p_dict, | |
| const char * | psz_key | |||
| ) | [inline, static] |
| static void* vlc_dictionary_value_for_key | ( | const vlc_dictionary_t * | p_dict, | |
| const char * | psz_key | |||
| ) | [inline, static] |
void* const kVLCDictionaryNotFound = NULL [static] |
1.5.1