diff options
author | albeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-11-12 14:16:30 +0000 |
---|---|---|
committer | albeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-11-12 14:16:30 +0000 |
commit | 1402692370a360a0e1d6eaddb505ce4b8ee91aa4 (patch) | |
tree | cf30e691da1d61691b0b0be4309c8b7be65d01fa /m_struct.h | |
parent | 20acd250c5c5b787e7a7226759752c5905eef13d (diff) | |
download | mpv-1402692370a360a0e1d6eaddb505ce4b8ee91aa4.tar.bz2 mpv-1402692370a360a0e1d6eaddb505ce4b8ee91aa4.tar.xz |
A struct setter. It allow you to setup struct from some user
settings.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8170 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'm_struct.h')
-rw-r--r-- | m_struct.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/m_struct.h b/m_struct.h new file mode 100644 index 0000000000..02cda2a6bb --- /dev/null +++ b/m_struct.h @@ -0,0 +1,50 @@ + +#ifndef NEW_CONFIG +#warning "Including m_struct.h but NEW_CONFIG is disabled" +#else + +///////////////////// A struct setter //////////////////////// + +struct m_option; + +/// Struct definition +typedef struct m_struct_st { + char* name; // For error msg and debuging + unsigned int size; // size of the whole struct + void* defaults; // Pointer to a struct filled with the default settings + struct m_option* fields; // settable fields +} m_struct_t; + +// Note : the p field of the m_option_t struct must contain the offset +// of the member in the struct (use M_ST_OFF macro for this). + +// From glib.h (modified ;-) +#define M_ST_OFF(struct_type, member) \ + ((void*) &((struct_type*) 0)->member) +#define M_ST_MB_P(struct_p, struct_offset) \ + ((void*) (struct_p) + (unsigned long) (struct_offset)) +#define M_ST_MB(member_type, struct_p, struct_offset) \ + (*(member_type*) M_STRUCT_MEMBER_P ((struct_p), (struct_offset))) + + + +/// Allocate the struct and set it to the defaults +void* +m_struct_alloc(m_struct_t* st); +/// Set a field of the struct +int +m_struct_set(m_struct_t* st, void* obj, char* field, char* param); +/// Reset a field (or all if field == NULL) to defaults +void +m_struct_reset(m_struct_t* st, void* obj, char* field); +/// Create a copy of an existing struct +void* +m_struct_copy(m_struct_t* st, void* obj); +/// Free an allocated struct +void +m_struct_free(m_struct_t* st, void* obj); +/// Get a field description +struct m_option* +m_struct_get_field(m_struct_t* st,char* f); + +#endif |