Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/Cherry/Core/include/audio/blargg_common.h
2 views
1
// Sets up common environment for Shay Green's libraries.
2
// To change configuration options, modify blargg_config.h, not this file.
3
4
// Gb_Snd_Emu 0.2.0
5
#ifndef BLARGG_COMMON_H
6
#define BLARGG_COMMON_H
7
8
#include <stddef.h>
9
#include <stdlib.h>
10
#include <assert.h>
11
#include <limits.h>
12
13
#undef BLARGG_COMMON_H
14
// allow blargg_config.h to #include blargg_common.h
15
#include "blargg_config.h"
16
#ifndef BLARGG_COMMON_H
17
#define BLARGG_COMMON_H
18
19
// BLARGG_RESTRICT: equivalent to restrict, where supported
20
#if __GNUC__ >= 3 || _MSC_VER >= 1100
21
#define BLARGG_RESTRICT __restrict
22
#else
23
#define BLARGG_RESTRICT
24
#endif
25
26
// STATIC_CAST(T,expr): Used in place of static_cast<T> (expr)
27
// CONST_CAST( T,expr): Used in place of const_cast<T> (expr)
28
#ifndef STATIC_CAST
29
#if __GNUC__ >= 4
30
#define STATIC_CAST(T,expr) static_cast<T> (expr)
31
#define CONST_CAST( T,expr) const_cast<T> (expr)
32
#else
33
#define STATIC_CAST(T,expr) ((T) (expr))
34
#define CONST_CAST( T,expr) ((T) (expr))
35
#endif
36
#endif
37
38
// blargg_err_t (0 on success, otherwise error string)
39
#ifndef blargg_err_t
40
typedef const char* blargg_err_t;
41
#endif
42
43
// blargg_vector - very lightweight vector of POD types (no constructor/destructor)
44
template<class T>
45
class blargg_vector {
46
T* begin_;
47
size_t size_;
48
public:
49
blargg_vector() : begin_( 0 ), size_( 0 ) { }
50
~blargg_vector() { free( begin_ ); }
51
size_t size() const { return size_; }
52
T* begin() const { return begin_; }
53
T* end() const { return begin_ + size_; }
54
blargg_err_t resize( size_t n )
55
{
56
// TODO: blargg_common.cpp to hold this as an outline function, ugh
57
void* p = realloc( begin_, n * sizeof (T) );
58
if ( p )
59
begin_ = (T*) p;
60
else if ( n > size_ ) // realloc failure only a problem if expanding
61
return "Out of memory";
62
size_ = n;
63
return 0;
64
}
65
void clear() { void* p = begin_; begin_ = 0; size_ = 0; free( p ); }
66
T& operator [] ( size_t n ) const
67
{
68
assert( n <= size_ ); // <= to allow past-the-end value
69
return begin_ [n];
70
}
71
};
72
73
#ifndef BLARGG_DISABLE_NOTHROW
74
// throw spec mandatory in ISO C++ if operator new can return NULL
75
#if __cplusplus >= 199711 || __GNUC__ >= 3
76
#define BLARGG_THROWS( spec ) throw spec
77
#else
78
#define BLARGG_THROWS( spec )
79
#endif
80
#define BLARGG_DISABLE_NOTHROW \
81
void* operator new ( size_t s ) BLARGG_THROWS(()) { return malloc( s ); }\
82
void operator delete ( void* p ) { free( p ); }
83
#define BLARGG_NEW new
84
#else
85
#include <new>
86
#define BLARGG_NEW new (std::nothrow)
87
#endif
88
89
// BLARGG_4CHAR('a','b','c','d') = 'abcd' (four character integer constant)
90
#define BLARGG_4CHAR( a, b, c, d ) \
91
((a&0xFF)*0x1000000 + (b&0xFF)*0x10000 + (c&0xFF)*0x100 + (d&0xFF))
92
93
// BOOST_STATIC_ASSERT( expr ): Generates compile error if expr is 0.
94
#ifndef BOOST_STATIC_ASSERT
95
#ifdef _MSC_VER
96
// MSVC6 (_MSC_VER < 1300) fails for use of __LINE__ when /Zl is specified
97
#define BOOST_STATIC_ASSERT( expr ) \
98
void blargg_failed_( int (*arg) [2 / (int) !!(expr) - 1] )
99
#else
100
// Some other compilers fail when declaring same function multiple times in class,
101
// so differentiate them by line
102
#define BOOST_STATIC_ASSERT( expr ) \
103
void blargg_failed_( int (*arg) [2 / !!(expr) - 1] [__LINE__] )
104
#endif
105
#endif
106
107
// BLARGG_COMPILER_HAS_BOOL: If 0, provides bool support for old compiler. If 1,
108
// compiler is assumed to support bool. If undefined, availability is determined.
109
#ifndef BLARGG_COMPILER_HAS_BOOL
110
#if defined (__MWERKS__)
111
#if !__option(bool)
112
#define BLARGG_COMPILER_HAS_BOOL 0
113
#endif
114
#elif defined (_MSC_VER)
115
#if _MSC_VER < 1100
116
#define BLARGG_COMPILER_HAS_BOOL 0
117
#endif
118
#elif defined (__GNUC__)
119
// supports bool
120
#elif __cplusplus < 199711
121
#define BLARGG_COMPILER_HAS_BOOL 0
122
#endif
123
#endif
124
#if defined (BLARGG_COMPILER_HAS_BOOL) && !BLARGG_COMPILER_HAS_BOOL
125
// If you get errors here, modify your blargg_config.h file
126
typedef int bool;
127
const bool true = 1;
128
const bool false = 0;
129
#endif
130
131
// blargg_long/blargg_ulong = at least 32 bits, int if it's big enough
132
133
#if INT_MAX < 0x7FFFFFFF || LONG_MAX == 0x7FFFFFFF
134
typedef long blargg_long;
135
#else
136
typedef int blargg_long;
137
#endif
138
139
#if UINT_MAX < 0xFFFFFFFF || ULONG_MAX == 0xFFFFFFFF
140
typedef unsigned long blargg_ulong;
141
#else
142
typedef unsigned blargg_ulong;
143
#endif
144
145
// BOOST::int8_t etc.
146
147
// HAVE_STDINT_H: If defined, use <stdint.h> for int8_t etc.
148
#if defined (HAVE_STDINT_H)
149
#include <stdint.h>
150
#define BOOST
151
152
// HAVE_INTTYPES_H: If defined, use <stdint.h> for int8_t etc.
153
#elif defined (HAVE_INTTYPES_H)
154
#include <inttypes.h>
155
#define BOOST
156
157
#else
158
struct BOOST
159
{
160
#if UCHAR_MAX == 0xFF && SCHAR_MAX == 0x7F
161
typedef signed char int8_t;
162
typedef unsigned char uint8_t;
163
#else
164
// No suitable 8-bit type available
165
typedef struct see_blargg_common_h int8_t;
166
typedef struct see_blargg_common_h uint8_t;
167
#endif
168
169
#if USHRT_MAX == 0xFFFF
170
typedef short int16_t;
171
typedef unsigned short uint16_t;
172
#else
173
// No suitable 16-bit type available
174
typedef struct see_blargg_common_h int16_t;
175
typedef struct see_blargg_common_h uint16_t;
176
#endif
177
178
#if ULONG_MAX == 0xFFFFFFFF
179
typedef long int32_t;
180
typedef unsigned long uint32_t;
181
#elif UINT_MAX == 0xFFFFFFFF
182
typedef int int32_t;
183
typedef unsigned int uint32_t;
184
#else
185
// No suitable 32-bit type available
186
typedef struct see_blargg_common_h int32_t;
187
typedef struct see_blargg_common_h uint32_t;
188
#endif
189
};
190
#endif
191
192
#if __GNUC__ >= 3
193
#define BLARGG_DEPRECATED __attribute__ ((deprecated))
194
#else
195
#define BLARGG_DEPRECATED
196
#endif
197
198
// Use in place of "= 0;" for a pure virtual, since these cause calls to std C++ lib.
199
// During development, BLARGG_PURE( x ) expands to = 0;
200
// virtual int func() BLARGG_PURE( { return 0; } )
201
#ifndef BLARGG_PURE
202
#define BLARGG_PURE( def ) def
203
#endif
204
205
#endif
206
#endif
207
208