Mercurial > mplayer.hg
annotate m_struct.h @ 37160:bb15cab6c059
Add ZLIB_CONST to make the zlib API const-correct.
| author | reimar |
|---|---|
| date | Sat, 23 Aug 2014 13:59:32 +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 */ |
