summaryrefslogtreecommitdiffstats
path: root/m_option.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-09-18 16:08:17 +0200
committerwm4 <wm4@nowhere>2012-09-23 14:58:31 +0200
commitbfc3dbae88dc70a832e82c5b44474fdf5a5e65a5 (patch)
treec769b3d50393a01c59c329d96236cd54b3d24ca1 /m_option.h
parent7fe56f16026d6b2440e879078f8848a5056f1da8 (diff)
downloadmpv-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.h19
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