Mercurial > almixer_isolated
view Isolated/ALmixer_RWops.h @ 70:7d63f5149d40
Enhanced endian detection code in SoundDecoder.h after reviewing ANDROID_NDK changes.
author | Eric Wing <ewing . public |-at-| gmail . com> |
---|---|
date | Wed, 20 Jun 2012 10:41:06 -0700 |
parents | 208a9ed20087 |
children | 36644b1b940b |
line wrap: on
line source
#ifndef ALMIXER_RWOPS #define ALMIXER_RWOPS #if defined(_WIN32) #if defined(ALMIXER_RWOPS_BUILD_LIBRARY) #define ALMIXER_RWOPS_DECLSPEC __declspec(dllexport) #else #define ALMIXER_RWOPS_DECLSPEC __declspec(dllimport) #endif #else #if defined(ALMIXER_RWOPS_BUILD_LIBRARY) #if defined (__GNUC__) && __GNUC__ >= 4 #define ALMIXER_RWOPS_DECLSPEC __attribute__((visibility("default"))) #else #define ALMIXER_RWOPS_DECLSPEC #endif #else #define ALMIXER_RWOPS_DECLSPEC #endif #endif #if defined(_WIN32) #define ALMIXER_RWOPS_CALL __cdecl #else #define ALMIXER_RWOPS_CALL #endif #ifdef __cplusplus extern "C" { #endif /* Trying to keep compatibility with SDL_RWops, * but I don't plan on reimplementing everything. */ #include <stdio.h> #include <stddef.h> /* The 'type' parameter needs to be 32-bits to match SDL_RWops. * <stdint.h> has been problematic for Visual Studio for years. * It appears that Visual Studio 2010 finally includes this. */ #include <stdint.h> typedef struct ALmixer_RWops { /** Seek to 'offset' relative to whence, one of stdio's whence values: * SEEK_SET, SEEK_CUR, SEEK_END * Returns the final offset in the data source. * (Note this is different than stdio's seek. This returns ftell.) */ long (ALMIXER_RWOPS_CALL *seek)(struct ALmixer_RWops* the_context, long offset, int whence); /** Read up to 'nitems' objects each of size 'size' from the data * source to the area pointed at by 'ptr'. * Returns the number of objects read, or -1 if the read failed. */ size_t (ALMIXER_RWOPS_CALL *read)(struct ALmixer_RWops* the_context, void* ptr, size_t size, size_t nitems); /** Write exactly 'nitems' objects each of size 'size' from the area * pointed at by 'ptr' to data source. * Returns 'num', or -1 if the write failed. */ size_t (ALMIXER_RWOPS_CALL *write)(struct ALmixer_RWops* the_context, const void* ptr, size_t size, size_t nitems); /** Close and free an allocated ALmixer_RWops structure */ int (ALMIXER_RWOPS_CALL *close)(struct ALmixer_RWops* the_context); /* type Needs to be a 32-bit to be compatible with SDL */ uint32_t type; union { #if defined(__WIN32__) && !defined(__SYMBIAN32__) /* Chances are that I will not implement this path. * But I want the padding to be the same as SDL. */ struct { int append; void *h; struct { void *data; size_t size; size_t left; } buffer; } win32io; #endif struct { int autoclose; FILE* fp; } stdio; struct { unsigned char* base; unsigned char* here; unsigned char* stop; } mem; struct { void* data1; } unknown; } hidden; } ALmixer_RWops; extern ALMIXER_RWOPS_DECLSPEC ALmixer_RWops* ALMIXER_RWOPS_CALL ALmixer_RWFromFile(const char* file_name, const char* file_mode); extern ALMIXER_RWOPS_DECLSPEC ALmixer_RWops* ALMIXER_RWOPS_CALL ALmixer_RWFromFP(FILE* file_pointer, char autoclose_flag); #define ALmixer_RWseek(rwops, offset, whence) (rwops)->seek(rwops, offset, whence) #define ALmixer_RWtell(rwops) (rwops)->seek(rwops, 0, SEEK_CUR) #define ALmixer_RWread(rwops, ptr, size, nitems) (rwops)->read(rwops, ptr, size, nitems) /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #endif