diff options
author | wm4 <wm4@nowhere> | 2012-09-18 16:08:17 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-09-23 14:58:31 +0200 |
commit | bfc3dbae88dc70a832e82c5b44474fdf5a5e65a5 (patch) | |
tree | c769b3d50393a01c59c329d96236cd54b3d24ca1 /m_option.h | |
parent | 7fe56f16026d6b2440e879078f8848a5056f1da8 (diff) | |
download | mpv-bfc3dbae88dc70a832e82c5b44474fdf5a5e65a5.tar.bz2 mpv-bfc3dbae88dc70a832e82c5b44474fdf5a5e65a5.tar.xz |
options: simplify somewhat by introducing a union for option values
The m_option_value union is supposed to contain a field for each
possible option type (as long as it actually stores data). This helps
avoiding silly temporary memory alocations. Using a pointer to an union
and to a field of the union interchangeably should be allowed by
standard C.
Diffstat (limited to 'm_option.h')
-rw-r--r-- | m_option.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/m_option.h b/m_option.h index f05fe17bd4..2bd9054ac2 100644 --- a/m_option.h +++ b/m_option.h @@ -178,6 +178,25 @@ struct m_sub_options { #define CONF_TYPE_TIME (&m_option_type_time) #define CONF_TYPE_TIME_SIZE (&m_option_type_time_size) +// Possible option values. Code is allowed to access option data without going +// through this union. It serves for self-documentation and to get minimal +// size/alignment requirements for option values in general. +union m_option_value { + int flag; // not the C type "bool"! + int int_; + int64_t int64; + float float_; + double double_; + char *string; + char **string_list; + int imgfmt; + int afmt; + m_span_t span; + m_obj_settings_t *obj_settings_list; + double time; + m_time_size_t time_size; +}; + //////////////////////////////////////////////////////////////////////////// // Option type description |