#ifndef _MULTIMEDIA_AUDIOTYPES_H
#define _MULTIMEDIA_AUDIOTYPES_H
#ifdef NO_EXTERN_C
#ifdef __cplusplus
extern "C" {
#endif
#endif
#include <math.h>
#include <stdlib.h>
#include <float.h>
#include <limits.h>
#include <fcntl.h>
#include <sys/types.h>
#include <audio_hdr.h>
const double AUDIO_UNKNOWN_TIME = DBL_MAX;
enum AudioSeverity {
InitMessage,
InitFatal,
Message,
Warning,
Error,
Consistency,
Fatal
};
enum Whence { Absolute = 0, Relative = 1, Relative_eof = 2};
#undef TRUE
#undef FALSE
enum aud_bool_t {FALSE = 0, TRUE = 1};
class Boolean {
private:
aud_bool_t value;
public:
inline Boolean(aud_bool_t x = FALSE): value(x)
{ }
inline Boolean(int x)
{ value = (x == 0) ? FALSE : TRUE; }
inline Boolean operator=(int x)
{ return (value = (x == 0) ? FALSE : TRUE); }
inline operator int()
{ return ((value == TRUE) ? 1 : 0); }
inline Boolean operator!()
{ return ((value == TRUE) ? FALSE : TRUE); }
};
enum fileaccess_t {
NoAccess = 0, ReadOnly = 1, WriteOnly = 2, ReadWrite = 3,
AppendOnly = 6, ReadAppend = 7
};
class FileAccess {
private:
fileaccess_t mode;
public:
FileAccess(fileaccess_t x = NoAccess): mode(x) { }
inline operator fileaccess_t()
{ return (mode); }
inline operator int() {
switch (mode) {
case ReadOnly: return (O_RDONLY);
case WriteOnly: return (O_WRONLY);
case ReadWrite: return (O_RDWR);
case AppendOnly: return (O_WRONLY | O_APPEND);
case ReadAppend: return (O_RDWR | O_APPEND);
case NoAccess:
default:
return (-1);
}
}
inline Boolean Readable() const
{ return ((int)mode & 1); }
inline Boolean Writeable() const
{ return ((int)mode & 2); }
inline Boolean Append() const
{ return ((int)mode & 4); }
};
const double AUDIO_MINFLOAT = .00000001;
class Double {
private:
double val;
public:
Double(double x = 0.): val(x) { }
Double(const Double &x): val(x.val) { }
inline int Undefined() const
{ return (val == AUDIO_UNKNOWN_TIME); }
inline operator double() const
{ return (val); }
inline Double& operator += (double y)
{ val += y; return (*this); }
inline Double& operator -= (double y)
{ val -= y; return (*this); }
Double& operator=(const Double&) = default;
};
inline double min(const Double& x, const Double& y) {
return (((double)x < (double)y) ? (double)x : (double)y);
}
inline double min(const Double& x, double y) {
return (((double)x < (double)y) ? (double)x : (double)y);
}
inline double min(double x, const Double& y) {
return (((double)x < (double)y) ? (double)x : (double)y);
}
inline double max(const Double& x, const Double& y) {
return (((double)x > (double)y) ? (double)x : (double)y);
}
inline double max(const Double& x, double y) {
return (((double)x > (double)y) ? (double)x : (double)y);
}
inline double max(double x, const Double& y) {
return (((double)x > (double)y) ? (double)x : (double)y);
}
inline int operator == (const Double &x, const Double &y) {
return (fabs((double)x - (double)y) <= AUDIO_MINFLOAT);
}
inline int operator == (const Double &x, double y) {
return (fabs((double)x - (double)y) <= AUDIO_MINFLOAT);
}
inline int operator == (double x, const Double &y) {
return (fabs((double)x - (double)y) <= AUDIO_MINFLOAT);
}
inline int operator != (const Double &x, const Double &y) {
return (!(x == y));
}
inline int operator != (const Double &x, double y) {
return (!(x == y));
}
inline int operator != (double x, const Double &y) {
return (!(x == y));
}
inline int operator <= (const Double &x, const Double &y) {
return (((double)x < (double)y) || (x == y));
}
inline int operator <= (const Double &x, double y) {
return (((double)x < (double)y) || (x == y));
}
inline int operator <= (double x, const Double &y)
{ return (((double)x < (double)y) || (x == y)); }
inline int operator >= (const Double &x, const Double &y)
{ return (((double)x > (double)y) || (x == y)); }
inline int operator >= (const Double &x, double y) {
return (((double)x > (double)y) || (x == y));
}
inline int operator >= (double x, const Double &y) {
return (((double)x > (double)y) || (x == y));
}
inline int operator < (const Double &x, const Double &y) {
return (!(x >= y));
}
inline int operator < (const Double &x, double y) {
return (!(x >= y));
}
inline int operator < (double x, const Double &y) {
return (!(x >= y));
}
inline int operator > (const Double &x, const Double &y) {
return (!(x <= y));
}
inline int operator > (const Double &x, double y) {
return (!(x <= y));
}
inline int operator > (double x, const Double &y) {
return (!(x <= y));
}
inline Double& operator += (Double &x, const Double &y) {
return (x += (double)y);
}
inline double operator += (double &x, const Double &y) {
return (x += (double)y);
}
inline Double& operator -= (Double &x, const Double &y) {
return (x -= (double)y);
}
inline double operator -= (double &x, const Double &y) {
return (x -= (double)y);
}
inline int Undefined(const Double &x) {
return (x.Undefined());
}
inline int Undefined(double x) {
return (x == AUDIO_UNKNOWN_TIME);
}
#ifdef NO_EXTERN_C
#ifdef __cplusplus
}
#endif
#endif
#endif