X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=84e67cfda475c25bb91468b2ad3402249e8091d1;hb=0b1d6a5e8279e7075691bb3eeaebbec73ed17c6f;hp=09f7b31e5d231609e0812b7e0e0fd4cc45b82c91;hpb=a8fcedd2dde5382673e6b39c559d3b93ac638297;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index 09f7b31e5d..84e67cfda4 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -203,7 +203,8 @@ typedef struct libvlc_t libvlc_t; typedef struct vlc_t vlc_t; typedef struct variable_t variable_t; typedef struct date_t date_t; -typedef struct hashtable_entry_t hashtable_entry_t; +typedef struct dict_entry_t dict_entry_t; +typedef struct dict_t dict_t; typedef struct gc_object_t gc_object_t ; /* Messages */ @@ -334,6 +335,16 @@ typedef struct announce_method_t announce_method_t; typedef struct announce_handler_t announce_handler_t; typedef struct sap_handler_t sap_handler_t; +typedef struct sout_std_t sout_std_t; +typedef struct sout_display_t sout_display_t; +typedef struct sout_duplicate_t sout_duplicate_t; +typedef struct sout_transcode_t sout_transcode_t; +typedef struct sout_chain_t sout_chain_t; +typedef struct streaming_profile_t streaming_profile_t; +typedef struct sout_module_t sout_module_t; +typedef struct sout_gui_descr_t sout_gui_descr_t; +typedef struct profile_parser_t profile_parser_t; + /* Decoders */ typedef struct decoder_t decoder_t; typedef struct decoder_sys_t decoder_sys_t; @@ -358,6 +369,8 @@ typedef struct iso639_lang_t iso639_lang_t; typedef struct device_t device_t; typedef struct device_probe_t device_probe_t; typedef struct probe_sys_t probe_sys_t; +typedef struct localized_string_t localized_string_t; +typedef struct i18n_string_t i18n_string_t; /* block */ typedef struct block_t block_t; @@ -607,10 +620,13 @@ static int64_t GCD( int64_t a, int64_t b ) if( !var ) goto error; } #define DECMALLOC_VOID( var, type ) type* var = (type*)malloc( sizeof(type) );\ if( !var ) return; +#define DECMALLOC_ERR( var, type ) type* var = (type*)malloc( sizeof(type) );\ + if( !var ) return VLC_ENOMEM; #define DECMALLOC_NULL( var, type ) type* var = (type*)malloc( sizeof(type) );\ if( !var ) return NULL; #define FREENULL(a) if( a ) { free( a ); a = NULL; } +#define FREE(a) if( a ) { free( a ); } /* Dynamic array handling: realloc array, move data, increment position */ #if defined( _MSC_VER ) && _MSC_VER < 1300 && !defined( UNDER_CE ) @@ -703,19 +719,44 @@ static int64_t GCD( int64_t a, int64_t b ) } \ } -/* Hash tables handling */ -struct hashtable_entry_t +/* Binary search in an array */ +#define BSEARCH( entries, count, elem, zetype, key, answer ) { \ + 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; \ + }\ + } \ +} + +/* Dictionnary handling */ +struct dict_entry_t { - int i_id; - char *psz_name; + int i_int; + char *psz_string; uint64_t i_hash; void *p_data; }; -VLC_EXPORT( void, vlc_HashInsert, (hashtable_entry_t **, int *, int, const char *, void *)); -VLC_EXPORT( void*, vlc_HashRetrieve, (hashtable_entry_t*, int, int, const char *) ); -VLC_EXPORT( int, vlc_HashLookup, (hashtable_entry_t *, int, int, const char *) ); +struct dict_t +{ + dict_entry_t *p_entries; + int i_entries; +}; +VLC_EXPORT( dict_t *, vlc_DictNew, (void) ); +VLC_EXPORT( void, vlc_DictClear, (dict_t * ) ); +VLC_EXPORT( void, vlc_DictInsert, (dict_t *, int, const char *, void * ) ); +VLC_EXPORT( void*, vlc_DictGet, (dict_t *, int, const char * ) ); +VLC_EXPORT( int, vlc_DictLookup, (dict_t *, int, const char * ) ); /* MSB (big endian)/LSB (little endian) conversions - network order is always * MSB, and should be used for both network communications and files. Note that @@ -1194,10 +1235,10 @@ VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); # else # define _(String) dgettext(PACKAGE_NAME, String) # endif -# define N_(String) ((char*)(String)) +# define N_(String) (String) #else -# define _(String) ((char*)(String)) -# define N_(String) ((char*)(String)) +# define _(String) (String) +# define N_(String) (String) #endif /*****************************************************************************