aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2014-07-06 03:27:39 -0700
committerChris Robinson <[email protected]>2014-07-06 03:27:39 -0700
commitd0a64fe191aabe085cabe1737c44ff6a47a3d4d8 (patch)
treea22024a773333fd6beb4e1af95af5497477045bd
parent5de7271bcd4df9a26301a37ed9cf76ddc6641328 (diff)
Don't require pre-declaring vector types
-rw-r--r--Alc/alstring.h15
-rw-r--r--Alc/backends/alsa.c2
-rw-r--r--Alc/backends/dsound.c6
-rw-r--r--Alc/backends/mmdevapi.c2
-rw-r--r--Alc/backends/pulseaudio.c2
-rw-r--r--Alc/backends/winmm.c8
-rw-r--r--Alc/helpers.c1
-rw-r--r--Alc/midi/sf2load.c7
-rw-r--r--Alc/vector.h20
-rw-r--r--OpenAL32/Include/alMain.h6
-rw-r--r--OpenAL32/alAuxEffectSlot.c11
11 files changed, 37 insertions, 43 deletions
diff --git a/Alc/alstring.h b/Alc/alstring.h
index 5b37a483..d5f64418 100644
--- a/Alc/alstring.h
+++ b/Alc/alstring.h
@@ -7,13 +7,13 @@
typedef char al_string_char_type;
-DECL_VECTOR(al_string_char_type)
+TYPEDEF_VECTOR(al_string_char_type, al_string)
-typedef vector_al_string_char_type al_string;
-typedef const_vector_al_string_char_type const_al_string;
-
-#define AL_STRING_INIT(_x) VECTOR_INIT(_x)
-#define AL_STRING_DEINIT(_x) VECTOR_DEINIT(_x)
+inline void al_string_deinit(al_string *str)
+{ VECTOR_DEINIT(*str); }
+#define AL_STRING_INIT(_x) do { (_x) = (al_string)NULL; } while(0)
+#define AL_STRING_INIT_STATIC() ((al_string)NULL)
+#define AL_STRING_DEINIT(_x) al_string_deinit(&(_x));
inline ALsizei al_string_length(const_al_string str)
{ return VECTOR_SIZE(str); }
@@ -42,7 +42,4 @@ void al_string_append_range(al_string *str, const al_string_char_type *from, con
void al_string_copy_wcstr(al_string *str, const wchar_t *from);
#endif
-
-DECL_VECTOR(al_string)
-
#endif /* ALSTRING_H */
diff --git a/Alc/backends/alsa.c b/Alc/backends/alsa.c
index 0712a412..2d3a8425 100644
--- a/Alc/backends/alsa.c
+++ b/Alc/backends/alsa.c
@@ -230,7 +230,7 @@ typedef struct {
al_string name;
al_string device_name;
} DevMap;
-DECL_VECTOR(DevMap)
+TYPEDEF_VECTOR(DevMap, vector_DevMap)
static vector_DevMap PlaybackDevices;
static vector_DevMap CaptureDevices;
diff --git a/Alc/backends/dsound.c b/Alc/backends/dsound.c
index 3ca398ed..f5dcfe59 100644
--- a/Alc/backends/dsound.c
+++ b/Alc/backends/dsound.c
@@ -109,10 +109,10 @@ typedef struct {
al_string name;
GUID guid;
} DevMap;
-DECL_VECTOR(DevMap)
+TYPEDEF_VECTOR(DevMap, vector_DevMap)
-vector_DevMap PlaybackDevices;
-vector_DevMap CaptureDevices;
+static vector_DevMap PlaybackDevices;
+static vector_DevMap CaptureDevices;
static void clear_devlist(vector_DevMap *list)
{
diff --git a/Alc/backends/mmdevapi.c b/Alc/backends/mmdevapi.c
index d732c3e1..430e1cb8 100644
--- a/Alc/backends/mmdevapi.c
+++ b/Alc/backends/mmdevapi.c
@@ -65,7 +65,7 @@ typedef struct {
al_string name;
WCHAR *devid;
} DevMap;
-DECL_VECTOR(DevMap)
+TYPEDEF_VECTOR(DevMap, vector_DevMap)
static void clear_devlist(vector_DevMap *list)
{
diff --git a/Alc/backends/pulseaudio.c b/Alc/backends/pulseaudio.c
index 58252240..b392f18e 100644
--- a/Alc/backends/pulseaudio.c
+++ b/Alc/backends/pulseaudio.c
@@ -458,7 +458,7 @@ typedef struct {
al_string name;
al_string device_name;
} DevMap;
-DECL_VECTOR(DevMap)
+TYPEDEF_VECTOR(DevMap, vector_DevMap)
static vector_DevMap PlaybackDevices;
static vector_DevMap CaptureDevices;
diff --git a/Alc/backends/winmm.c b/Alc/backends/winmm.c
index 624af37a..cad66470 100644
--- a/Alc/backends/winmm.c
+++ b/Alc/backends/winmm.c
@@ -55,17 +55,13 @@ typedef struct {
} WinMMData;
+TYPEDEF_VECTOR(al_string, vector_al_string)
static vector_al_string PlaybackDevices;
static vector_al_string CaptureDevices;
static void clear_devlist(vector_al_string *list)
{
- al_string *iter, *end;
-
- iter = VECTOR_ITER_BEGIN(*list);
- end = VECTOR_ITER_END(*list);
- for(;iter != end;iter++)
- AL_STRING_DEINIT(*iter);
+ VECTOR_FOR_EACH(al_string, *list, al_string_deinit);
VECTOR_RESIZE(*list, 0);
}
diff --git a/Alc/helpers.c b/Alc/helpers.c
index df370206..f87b935c 100644
--- a/Alc/helpers.c
+++ b/Alc/helpers.c
@@ -653,6 +653,7 @@ ALboolean vector_insert(void *ptr, size_t base_size, size_t obj_size, void *ins_
}
+extern inline void al_string_deinit(al_string *str);
extern inline ALsizei al_string_length(const_al_string str);
extern inline ALboolean al_string_empty(const_al_string str);
extern inline const al_string_char_type *al_string_get_cstr(const_al_string str);
diff --git a/Alc/midi/sf2load.c b/Alc/midi/sf2load.c
index 933166ad..4ee691ba 100644
--- a/Alc/midi/sf2load.c
+++ b/Alc/midi/sf2load.c
@@ -307,12 +307,9 @@ static void RiffHdr_read(RiffHdr *self, Reader *stream)
}
-DECL_VECTOR(Generator)
-DECL_VECTOR(Modulator)
-
typedef struct GenModList {
- vector_Generator gens;
- vector_Modulator mods;
+ VECTOR(Generator) gens;
+ VECTOR(Modulator) mods;
} GenModList;
static void GenModList_Construct(GenModList *self)
diff --git a/Alc/vector.h b/Alc/vector.h
index 5e169f24..944cccc2 100644
--- a/Alc/vector.h
+++ b/Alc/vector.h
@@ -11,15 +11,23 @@ typedef struct vector__s {
ALsizei Size;
} *vector_;
-#define DECL_VECTOR(T) typedef struct vector_##T##_s { \
+#define TYPEDEF_VECTOR(T, N) typedef struct { \
ALsizei Capacity; \
ALsizei Size; \
T Data[]; \
-} *vector_##T; \
-typedef const struct vector_##T##_s *const_vector_##T;
+} _##N; \
+typedef _##N* N; \
+typedef const _##N* const_##N;
-#define VECTOR_INIT(_x) do { (_x) = NULL; } while(0)
-#define VECTOR_DEINIT(_x) do { free((_x)); (_x) = NULL; } while(0)
+#define VECTOR(T) struct { \
+ ALsizei Capacity; \
+ ALsizei Size; \
+ T Data[]; \
+}*
+
+#define VECTOR_INIT(_x) do { (_x) = NULL; } while(0)
+#define VECTOR_INIT_STATIC() NULL
+#define VECTOR_DEINIT(_x) do { free((_x)); (_x) = NULL; } while(0)
/* Helper to increase a vector's reserve. Do not call directly. */
ALboolean vector_reserve(void *ptr, size_t base_size, size_t obj_count, size_t obj_size, ALboolean exact);
@@ -63,7 +71,7 @@ ALboolean vector_insert(void *ptr, size_t base_size, size_t obj_size, void *ins_
_t *_iter = VECTOR_ITER_BEGIN((_x)); \
_t *_end = VECTOR_ITER_END((_x)); \
for(;_iter != _end;++_iter) \
- (_f)(_iter); \
+ _f(_iter); \
} while(0)
#endif /* AL_VECTOR_H */
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 8cd270d7..e9ac28e4 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -720,10 +720,6 @@ struct ALCdevice_struct
#define MIXER_THREAD_NAME "alsoft-mixer"
-typedef struct ALeffectslot *ALeffectslotPtr;
-DECL_VECTOR(ALeffectslotPtr)
-
-
struct ALCcontext_struct
{
RefCount ref;
@@ -749,7 +745,7 @@ struct ALCcontext_struct
ALsizei ActiveSourceCount;
ALsizei MaxActiveSources;
- vector_ALeffectslotPtr ActiveAuxSlots;
+ VECTOR(struct ALeffectslot*) ActiveAuxSlots;
ALCdevice *Device;
const ALCchar *ExtensionList;
diff --git a/OpenAL32/alAuxEffectSlot.c b/OpenAL32/alAuxEffectSlot.c
index 9f554cb0..ca1e1237 100644
--- a/OpenAL32/alAuxEffectSlot.c
+++ b/OpenAL32/alAuxEffectSlot.c
@@ -35,7 +35,7 @@
extern inline struct ALeffectslot *LookupEffectSlot(ALCcontext *context, ALuint id);
extern inline struct ALeffectslot *RemoveEffectSlot(ALCcontext *context, ALuint id);
-static ALenum AddEffectSlotArray(ALCcontext *Context, const_vector_ALeffectslotPtr slots);
+static ALenum AddEffectSlotArray(ALCcontext *Context, ALeffectslot **start, ALsizei count);
static void RemoveEffectSlotArray(ALCcontext *Context, const ALeffectslot *slot);
@@ -52,7 +52,7 @@ static inline ALeffectStateFactory *getFactoryByType(ALenum type)
AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots)
{
ALCcontext *context;
- vector_ALeffectslotPtr slotvec;
+ VECTOR(ALeffectslot*) slotvec;
ALsizei cur;
ALenum err;
@@ -94,7 +94,7 @@ AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslo
effectslots[cur] = slot->id;
}
- err = AddEffectSlotArray(context, slotvec);
+ err = AddEffectSlotArray(context, VECTOR_ITER_BEGIN(slotvec), n);
if(err != AL_NO_ERROR)
{
alDeleteAuxiliaryEffectSlots(cur, effectslots);
@@ -385,13 +385,12 @@ done:
}
-static ALenum AddEffectSlotArray(ALCcontext *context, const_vector_ALeffectslotPtr slots)
+static ALenum AddEffectSlotArray(ALCcontext *context, ALeffectslot **start, ALsizei count)
{
ALenum err = AL_NO_ERROR;
LockContext(context);
- if(!VECTOR_INSERT(context->ActiveAuxSlots, VECTOR_ITER_END(context->ActiveAuxSlots),
- VECTOR_ITER_BEGIN(slots), VECTOR_ITER_END(slots)))
+ if(!VECTOR_INSERT(context->ActiveAuxSlots, VECTOR_ITER_END(context->ActiveAuxSlots), start, start+count))
err = AL_OUT_OF_MEMORY;
UnlockContext(context);