Mercurial > mplayer.hg
annotate m_struct.h @ 21221:7124c26f3db3
Add generic target that allow compiling without any assembler or otherwise
architecture specific code (except endiannes of course).
Usage example: ./configure --target=generic-linux
author | reimar |
---|---|
date | Sat, 25 Nov 2006 17:58:33 +0000 |
parents | 5949a654e2d4 |
children | 0b262e00bc99 |
rev | line source |
---|---|
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
9586
diff
changeset
|
1 #ifndef _M_STRUCT_H |
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
9586
diff
changeset
|
2 #define _M_STRUCT_H |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
3 |
18258 | 4 /// \defgroup OptionsStruct Options struct |
5 /// \ingroup Options | |
6 /// An API to manipulate structs using m_option. | |
7 ///@{ | |
8 | |
9 /// \file m_struct.h | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
10 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
11 struct m_option; |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
12 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
13 /// Struct definition |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
14 typedef struct m_struct_st { |
18283 | 15 /// 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
|
16 const char* name; |
18258 | 17 /// size of the whole struct |
18 unsigned int size; | |
19 /// Pointer to a struct filled with the default settings | |
20 void* defaults; | |
21 /// Field list. | |
22 /** The p field of the \ref m_option struct must contain the offset | |
23 * of the member in the struct (use M_ST_OFF macro for this). | |
24 */ | |
25 struct m_option* fields; | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
26 } m_struct_t; |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
27 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
28 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
29 // From glib.h (modified ;-) |
18258 | 30 |
31 /// Get the offset of a struct field. | |
32 /** \param struct_type Struct type. | |
33 * \param member Name of the field. | |
34 * \return The offset of the field in bytes. | |
35 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
36 #define M_ST_OFF(struct_type, member) \ |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
37 ((void*) &((struct_type*) 0)->member) |
18258 | 38 |
39 /// Get a pointer to a struct field. | |
40 /** \param struct_p Pointer to the struct. | |
41 * \param struct_offset Offset of the field in the struct. | |
42 * \return Pointer to the struct field. | |
43 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
44 #define M_ST_MB_P(struct_p, struct_offset) \ |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
45 ((void*) (struct_p) + (unsigned long) (struct_offset)) |
18258 | 46 |
47 /// Acces a struct field at a given offset. | |
48 /** \param member_type Type of the field. | |
49 * \param struct_p Pointer to the struct. | |
50 * \param struct_offset Offset of the field in the struct. | |
51 * \return The struct field at the given offset. | |
52 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
53 #define M_ST_MB(member_type, struct_p, struct_offset) \ |
9586 | 54 (*(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
|
55 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
56 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
57 |
18258 | 58 /// Allocate the struct and set it to the defaults. |
59 /** \param st Struct definition. | |
60 * \return The newly allocated object set to default. | |
61 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
62 void* |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
63 m_struct_alloc(m_struct_t* st); |
18258 | 64 |
65 /// Set a field of the struct. | |
66 /** \param st Struct definition. | |
67 * \param obj Pointer to the struct to set. | |
68 * \param field Name of the field to set. | |
69 * \param param New value of the field. | |
70 * \return 0 on error, 1 on success. | |
71 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
72 int |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
73 m_struct_set(m_struct_t* st, void* obj, char* field, char* param); |
18258 | 74 |
75 /// Reset a field (or all if field == NULL) to defaults. | |
76 /** \param st Struct definiton. | |
77 * \param obj Pointer to the struct to set. | |
78 * \param field Name of the field to reset, if NULL all fields are reseted. | |
79 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
80 void |
19104
2ec2301183cd
marks several read-only string parameters which aren't modified inside the called function as const. Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents:
18283
diff
changeset
|
81 m_struct_reset(m_struct_t* st, void* obj, const char* field); |
18258 | 82 |
83 /// Create a copy of an existing struct. | |
84 /** \param st Struct definiton. | |
85 * \param obj Pointer to the struct to copy. | |
86 * \return Newly allocated copy of obj. | |
87 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
88 void* |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
89 m_struct_copy(m_struct_t* st, void* obj); |
18258 | 90 |
91 /// Free an allocated struct. | |
92 /** \param st Struct definiton. | |
93 * \param obj Pointer to the struct to copy. | |
94 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
95 void |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
96 m_struct_free(m_struct_t* st, void* obj); |
18258 | 97 |
98 /// Get a field description. | |
99 /** \param st Struct definiton. | |
100 * \param f Name of the field. | |
101 * \return The \ref m_option struct describing the field or NULL if not found. | |
102 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
103 struct m_option* |
19104
2ec2301183cd
marks several read-only string parameters which aren't modified inside the called function as const. Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents:
18283
diff
changeset
|
104 m_struct_get_field(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
|
105 |
18258 | 106 ///@} |
107 | |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
9586
diff
changeset
|
108 #endif /* _M_STRUCT_H */ |