Mercurial > mplayer.hg
annotate m_struct.h @ 25561:1e215be6a749
Get rid of build system hackery to generate mga_crtc2_vid.o and rage128_vid.o.
Instead, create files that #include mga_vid.c/radeon_vid.c with the proper
#defines set. This has the added benefit of fixing dependency generation,
which only works for existing .c files.
author | diego |
---|---|
date | Wed, 02 Jan 2008 22:00:34 +0000 |
parents | cc170348a763 |
children | 4129c8cfa742 |
rev | line source |
---|---|
23689
3f0d00abc073
Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents:
23613
diff
changeset
|
1 #ifndef M_STRUCT_H |
3f0d00abc073
Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents:
23613
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 | |
22027 | 20 const void* defaults; |
18258 | 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 */ | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
25 const 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) \ |
23613 | 45 ((void *)((char *)(struct_p) + (unsigned long)(struct_offset))) |
18258 | 46 |
23612 | 47 /// Access a struct field at a given offset. |
18258 | 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* |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
63 m_struct_alloc(const 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 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
73 m_struct_set(const m_struct_t* st, void* obj, char* field, char* param); |
18258 | 74 |
75 /// Reset a field (or all if field == NULL) to defaults. | |
23612 | 76 /** \param st Struct definition. |
18258 | 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 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
81 m_struct_reset(const m_struct_t* st, void* obj, const char* field); |
18258 | 82 |
83 /// Create a copy of an existing struct. | |
23612 | 84 /** \param st Struct definition. |
18258 | 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* |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
89 m_struct_copy(const m_struct_t* st, void* obj); |
18258 | 90 |
91 /// Free an allocated struct. | |
23612 | 92 /** \param st Struct definition. |
18258 | 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 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
96 m_struct_free(const m_struct_t* st, void* obj); |
18258 | 97 |
98 /// Get a field description. | |
23612 | 99 /** \param st Struct definition. |
18258 | 100 * \param f Name of the field. |
101 * \return The \ref m_option struct describing the field or NULL if not found. | |
102 */ | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
103 const struct m_option* |
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
104 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
|
105 |
18258 | 106 ///@} |
107 | |
23689
3f0d00abc073
Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents:
23613
diff
changeset
|
108 #endif /* M_STRUCT_H */ |