Mercurial > mplayer.hg
annotate m_struct.h @ 36905:bff7c54aa8f1
Increase arithmetic precision.
author | ib |
---|---|
date | Wed, 12 Mar 2014 13:24:34 +0000 |
parents | fd1feb8ae5fd |
children | eaa58d991a06 |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
17 */ |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
18 |
26029 | 19 #ifndef MPLAYER_M_STRUCT_H |
20 #define MPLAYER_M_STRUCT_H | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
21 |
36768 | 22 #include <stddef.h> |
23 | |
18258 | 24 /// \defgroup OptionsStruct Options struct |
25 /// \ingroup Options | |
26 /// An API to manipulate structs using m_option. | |
27 ///@{ | |
28 | |
33882 | 29 /// \file |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
30 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
31 struct m_option; |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
32 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
33 /// Struct definition |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
34 typedef struct m_struct_st { |
18283 | 35 /// For error messages and debugging |
19194
5949a654e2d4
marks some read-only char* inside structs as const, patch by Stefan Huehner, stefan At huehner-org
reynaldo
parents:
19104
diff
changeset
|
36 const char* name; |
18258 | 37 /// size of the whole struct |
38 unsigned int size; | |
39 /// Pointer to a struct filled with the default settings | |
22027 | 40 const void* defaults; |
18258 | 41 /// Field list. |
42 /** The p field of the \ref m_option struct must contain the offset | |
43 * of the member in the struct (use M_ST_OFF macro for this). | |
44 */ | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
45 const struct m_option* fields; |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
46 } m_struct_t; |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
47 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
48 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
49 // From glib.h (modified ;-) |
18258 | 50 |
51 /// Get the offset of a struct field. | |
52 /** \param struct_type Struct type. | |
53 * \param member Name of the field. | |
54 * \return The offset of the field in bytes. | |
55 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
56 #define M_ST_OFF(struct_type, member) \ |
36768 | 57 ((void*)offsetof(struct_type, member)) |
18258 | 58 |
59 /// Get a pointer to a struct field. | |
60 /** \param struct_p Pointer to the struct. | |
61 * \param struct_offset Offset of the field in the struct. | |
62 * \return Pointer to the struct field. | |
63 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
64 #define M_ST_MB_P(struct_p, struct_offset) \ |
23613 | 65 ((void *)((char *)(struct_p) + (unsigned long)(struct_offset))) |
18258 | 66 |
23612 | 67 /// Access a struct field at a given offset. |
18258 | 68 /** \param member_type Type of the field. |
69 * \param struct_p Pointer to the struct. | |
70 * \param struct_offset Offset of the field in the struct. | |
71 * \return The struct field at the given offset. | |
72 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
73 #define M_ST_MB(member_type, struct_p, struct_offset) \ |
9586 | 74 (*(member_type*) M_ST_MB_P ((struct_p), (struct_offset))) |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
75 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
76 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
77 |
18258 | 78 /// Allocate the struct and set it to the defaults. |
79 /** \param st Struct definition. | |
80 * \return The newly allocated object set to default. | |
81 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
82 void* |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
83 m_struct_alloc(const m_struct_t* st); |
18258 | 84 |
85 /// Set a field of the struct. | |
86 /** \param st Struct definition. | |
87 * \param obj Pointer to the struct to set. | |
88 * \param field Name of the field to set. | |
89 * \param param New value of the field. | |
90 * \return 0 on error, 1 on success. | |
91 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
92 int |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
93 m_struct_set(const m_struct_t* st, void* obj, const char* field, const char* param); |
18258 | 94 |
95 /// Reset a field (or all if field == NULL) to defaults. | |
23612 | 96 /** \param st Struct definition. |
18258 | 97 * \param obj Pointer to the struct to set. |
98 * \param field Name of the field to reset, if NULL all fields are reseted. | |
99 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
100 void |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
101 m_struct_reset(const m_struct_t* st, void* obj, const char* field); |
18258 | 102 |
103 /// Create a copy of an existing struct. | |
23612 | 104 /** \param st Struct definition. |
18258 | 105 * \param obj Pointer to the struct to copy. |
106 * \return Newly allocated copy of obj. | |
107 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
108 void* |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
109 m_struct_copy(const m_struct_t* st, void* obj); |
18258 | 110 |
111 /// Free an allocated struct. | |
23612 | 112 /** \param st Struct definition. |
18258 | 113 * \param obj Pointer to the struct to copy. |
114 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
115 void |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
116 m_struct_free(const m_struct_t* st, void* obj); |
18258 | 117 |
118 /// Get a field description. | |
23612 | 119 /** \param st Struct definition. |
18258 | 120 * \param f Name of the field. |
121 * \return The \ref m_option struct describing the field or NULL if not found. | |
122 */ | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
123 const struct m_option* |
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
124 m_struct_get_field(const m_struct_t* st,const char* f); |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
125 |
18258 | 126 ///@} |
127 | |
26029 | 128 #endif /* MPLAYER_M_STRUCT_H */ |