diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2010-05-29 07:25:38 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2010-05-29 07:25:38 +0000 |
| commit | 72c06a258940696093f255fb1061beb58e1cdd0b (patch) | |
| tree | 36b9a7712eec2d4f07837eab9c38ef1c5af85319 /src/base | |
| parent | e56feb597bc743677633432f77513b02907fd169 (diff) | |
| download | zcatch-72c06a258940696093f255fb1061beb58e1cdd0b.tar.gz zcatch-72c06a258940696093f255fb1061beb58e1cdd0b.zip | |
copied refactor to trunk
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/math.h (renamed from src/base/math.hpp) | 12 | ||||
| -rw-r--r-- | src/base/system.c | 24 | ||||
| -rw-r--r-- | src/base/system.h | 51 | ||||
| -rw-r--r-- | src/base/tl/algorithm.h (renamed from src/base/tl/algorithm.hpp) | 4 | ||||
| -rw-r--r-- | src/base/tl/allocator.h (renamed from src/base/tl/allocator.hpp) | 0 | ||||
| -rw-r--r-- | src/base/tl/array.h (renamed from src/base/tl/array.hpp) | 10 | ||||
| -rw-r--r-- | src/base/tl/base.h (renamed from src/base/tl/base.hpp) | 0 | ||||
| -rw-r--r-- | src/base/tl/math.hpp | 45 | ||||
| -rw-r--r-- | src/base/tl/matrix.hpp | 163 | ||||
| -rw-r--r-- | src/base/tl/quat.hpp | 211 | ||||
| -rw-r--r-- | src/base/tl/range.h (renamed from src/base/tl/range.hpp) | 2 | ||||
| -rw-r--r-- | src/base/tl/sorted_array.h (renamed from src/base/tl/sorted_array.hpp) | 4 | ||||
| -rw-r--r-- | src/base/tl/stream.hpp | 65 | ||||
| -rw-r--r-- | src/base/tl/string.h (renamed from src/base/tl/string.hpp) | 4 | ||||
| -rw-r--r-- | src/base/tl/vector.hpp | 198 | ||||
| -rw-r--r-- | src/base/vmath.h (renamed from src/base/vmath.hpp) | 0 |
16 files changed, 76 insertions, 717 deletions
diff --git a/src/base/math.hpp b/src/base/math.h index 302935d7..f3ba2ea8 100644 --- a/src/base/math.hpp +++ b/src/base/math.h @@ -49,20 +49,10 @@ public: operator float() const { return value/(float)(1<<10); } }; -class tune_param -{ - int value; -public: - void set(int v) { value = v; } - int get() const { return value; } - tune_param &operator = (int v) { value = (int)(v*100.0f); return *this; } - tune_param &operator = (float v) { value = (int)(v*100.0f); return *this; } - operator float() const { return value/100.0f; } -}; - const float pi = 3.1415926535897932384626433f; template <typename T> inline T min(T a, T b) { return a<b?a:b; } template <typename T> inline T max(T a, T b) { return a>b?a:b; } +template <typename T> inline T absolute(T a) { return a<T(0)?-a:a; } #endif // BASE_MATH_H diff --git a/src/base/system.c b/src/base/system.c index f570fdf3..47893aa3 100644 --- a/src/base/system.c +++ b/src/base/system.c @@ -42,7 +42,9 @@ #include <direct.h> #include <errno.h> - #define EWOULDBLOCK WSAEWOULDBLOCK + #ifndef EWOULDBLOCK + #define EWOULDBLOCK WSAEWOULDBLOCK + #endif #else #error NOT IMPLEMENTED #endif @@ -86,11 +88,11 @@ void dbg_msg(const char *sys, const char *fmt, ...) char str[1024*4]; char *msg; int i, len; - + str_format(str, sizeof(str), "[%08x][%s]: ", (int)time(0), sys); len = strlen(str); msg = (char *)str + len; - + va_start(args, fmt); #if defined(CONF_FAMILY_WINDOWS) _vsnprintf(msg, sizeof(str)-len, fmt, args); @@ -98,7 +100,7 @@ void dbg_msg(const char *sys, const char *fmt, ...) vsnprintf(msg, sizeof(str)-len, fmt, args); #endif va_end(args); - + for(i = 0; i < num_loggers; i++) loggers[i](str); } @@ -118,7 +120,7 @@ static void logger_debugger(const char *line) } -IOHANDLE logfile = 0; +static IOHANDLE logfile = 0; static void logger_file(const char *line) { io_write(logfile, line, strlen(line)); @@ -137,7 +139,6 @@ void dbg_logger_file(const char *filename) dbg_msg("dbg/logger", "failed to open '%s' for logging", filename); } - /* */ int memory_alloced = 0; @@ -674,7 +675,7 @@ int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size mem_zero(&sa, sizeof(sa)); netaddr_to_sockaddr(addr, &sa); d = sendto((int)sock, (const char*)data, size, 0, &sa, sizeof(sa)); - if(d < 0) + /*if(d < 0) { char addrstr[256]; net_addr_str(addr, addrstr, sizeof(addrstr)); @@ -684,7 +685,7 @@ int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size dbg_msg("net", "\tsize = %d %x", size, size); dbg_msg("net", "\taddr = %s", addrstr); - } + }*/ network_stats.sent_bytes += size; network_stats.sent_packets++; return d; @@ -1102,6 +1103,10 @@ int str_comp(const char *a, const char *b) return strcmp(a, b); } +int str_comp_num(const char *a, const char *b, const int num) +{ + return strncmp(a, b, num); +} const char *str_find_nocase(const char *haystack, const char *needle) { @@ -1220,6 +1225,9 @@ char str_uppercase(char c) return c; } +int str_toint(const char *str) { return atoi(str); } +float str_tofloat(const char *str) { return atof(str); } + static int str_utf8_isstart(char c) diff --git a/src/base/system.h b/src/base/system.h index 3c9974d8..0850a08b 100644 --- a/src/base/system.h +++ b/src/base/system.h @@ -46,14 +46,15 @@ void dbg_break(); /* Function: dbg_msg - Prints a debug message. + + Prints a debug message. Parameters: sys - A string that describes what system the message belongs to fmt - A printf styled format string. Remarks: - Does nothing in relase version of the library. + Does nothing in release version of the library. See Also: <dbg_assert> @@ -351,7 +352,7 @@ void *thread_create(void (*threadfunc)(void *), void *user); void thread_wait(void *thread); /* - Function: thread_destoy + Function: thread_destroy Destroys a thread. Parameters: @@ -782,6 +783,25 @@ int str_comp_nocase(const char *a, const char *b); int str_comp(const char *a, const char *b); /* + Function: str_comp_nocase + Compares up to num characters of two strings case sensitive. + + Parameters: + a - String to compare. + b - String to compare. + num - Maximum characters to compare + + Returns: + <0 - String a is lesser then string b + 0 - String a is equal to string b + >0 - String a is greater then string b + + Remarks: + - The strings are treated as zero-termineted strings. +*/ +int str_comp_num(const char *a, const char *b, const int num); + +/* Function: str_find_nocase Finds a string inside another string case insensitive. @@ -942,8 +962,29 @@ void mem_debug_dump(); void swap_endian(void *data, unsigned elem_size, unsigned num); -typedef void (*DBG_LOGGER)(const char *line); +/* Group: Debug levels */ +//by format +enum { + DBG_FMT_RAW = 1, //raw output + DBG_FMT_TIME = 2, //show time + DBG_FMT_SYS = 3, //show sys + DBG_FMT_FULL = 4 //show both +}; + +enum { + DBG_LEVEL_IMPORTANT = 0, //important always showed messages + DBG_LEVEL_ERROR = 1, //error messages + DBG_LEVEL_WARNING = 2, //warning messages + DBG_LEVEL_MSG = 3, //extra debug messages + DBG_LEVEL_INFO = 4 //info messages +}; + +#define DBG_LEVEL_LOW DBG_LEVEL_IMPORTANT +#define DBG_LEVEL_HIGH DBG_LEVEL_INFO + +typedef void (*DBG_LOGGER)(const char *line); void dbg_logger(DBG_LOGGER logger); + void dbg_logger_stdout(); void dbg_logger_debugger(); void dbg_logger_file(const char *filename); @@ -968,6 +1009,8 @@ typedef struct void net_stats(NETSTATS *stats); +int str_toint(const char *str); +float str_tofloat(const char *str); int str_isspace(char c); char str_uppercase(char c); unsigned str_quickhash(const char *str); diff --git a/src/base/tl/algorithm.hpp b/src/base/tl/algorithm.h index 9d78810b..32c2da73 100644 --- a/src/base/tl/algorithm.hpp +++ b/src/base/tl/algorithm.h @@ -1,7 +1,7 @@ #ifndef TL_FILE_ALGORITHM_HPP #define TL_FILE_ALGORITHM_HPP -#include "range.hpp" +#include "range.h" /* @@ -59,7 +59,7 @@ R find_linear(R range, T value) concept_empty::check(range); concept_forwarditeration::check(range); for(; !range.empty(); range.pop_front()) - if(value < range.front()) + if(value == range.front()) break; return range; } diff --git a/src/base/tl/allocator.hpp b/src/base/tl/allocator.h index 3baa1c19..3baa1c19 100644 --- a/src/base/tl/allocator.hpp +++ b/src/base/tl/allocator.h diff --git a/src/base/tl/array.hpp b/src/base/tl/array.h index 7b8698d4..580f4682 100644 --- a/src/base/tl/array.hpp +++ b/src/base/tl/array.h @@ -1,8 +1,8 @@ #ifndef TL_FILE_ARRAY_HPP #define TL_FILE_ARRAY_HPP -#include "range.hpp" -#include "allocator.hpp" +#include "range.h" +#include "allocator.h" /* @@ -165,7 +165,7 @@ public: int add(const T& item) { incsize(); - num_elements = size()+1; + set_size(size()+1); list[num_elements-1] = item; return num_elements-1; } @@ -189,7 +189,7 @@ public: int index = (int)(&r.front()-list); incsize(); - num_elements = size()+1; + set_size(size()+1); for(int i = num_elements-1; i > index; i--) list[i] = list[i-1]; @@ -283,7 +283,7 @@ public: */ int memusage() { - return sizeof(*this) + sizeof(T)*list_size; + return sizeof(array) + sizeof(T)*size; } /* diff --git a/src/base/tl/base.hpp b/src/base/tl/base.h index c202de79..c202de79 100644 --- a/src/base/tl/base.hpp +++ b/src/base/tl/base.h diff --git a/src/base/tl/math.hpp b/src/base/tl/math.hpp deleted file mode 100644 index b323dea8..00000000 --- a/src/base/tl/math.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ -#ifndef BASE_MATH_H -#define BASE_MATH_H - -#include <stdlib.h> - -template <typename T> -inline T clamp(T val, T min, T max) -{ - if(val < min) - return min; - if(val > max) - return max; - return val; -} - -inline float sign(float f) -{ - return f<0.0f?-1.0f:1.0f; -} - -inline int round(float f) -{ - if(f > 0) - return (int)(f+0.5f); - return (int)(f-0.5f); -} - -template<typename T, typename TB> -inline T mix(const T a, const T b, TB amount) -{ - return a + (b-a)*amount; -} - -inline float frandom() { return rand()/(float)(RAND_MAX); } - -const float pi = 3.1415926535897932384626433f; - -template <typename T> inline T min(T a, T b) { return a<b?a:b; } -template <typename T> inline T max(T a, T b) { return a>b?a:b; } - -template <typename T> inline T min(T a, T b, T c) { return min(min(a,b),c); } -template <typename T> inline T max(T a, T b, T c) { return max(max(a,b),c); } - -#endif // BASE_MATH_H diff --git a/src/base/tl/matrix.hpp b/src/base/tl/matrix.hpp deleted file mode 100644 index b723eaa7..00000000 --- a/src/base/tl/matrix.hpp +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef TL_FILE_MATRIX_HPP -#define TL_FILE_MATRIX_HPP - -/* - - Looks like OpenGL - - Column Major - - / m[0][0] m[1][0] m[2][0] m[3][0] \ / v[0] \ - | | | | - | m[0][1] m[1][1] m[2][1] m[3][1] | | v[1] | - | | | | - M(v) = | m[0][2] m[1][2] m[2][2] m[3][2] | X | v[2] | - | | | | - \ m[0][3] m[1][3] m[2][3] m[3][3] / \ v[3] / - - v[0] = x - v[1] = y - v[2] = z - v[3] = w or 1 - - +y - | - | - |_____ +x - / - / - +z - - right = +x - up = +y - forward = -z - -*/ - -template<class T> -class matrix4_base -{ -public: - // [col][row] - T m[4][4]; - - // - inline matrix4_base() - {} - - inline vector3_base<T> get_column3(const int i) const { return vector3_base<T>(m[i][0], m[i][1], m[i][2]); } - inline vector3_base<T> get_column4(const int i) const { return vector4_base<T>(m[i][0], m[i][1], m[i][2], m[i][3]); } - inline vector3_base<T> get_row3(const int i) const { return vector3_base<T>(m[0][i], m[1][i], m[2][i]); } - inline vector4_base<T> get_row4(const int i) const { return vector4_base<T>(m[0][i], m[1][i], m[2][i], m[3][i]); } - - inline vector3_base<T> get_right() const { return get_row3(0); } - inline vector3_base<T> get_up() const { return get_row3(1); } - inline vector3_base<T> get_forward() const { return -get_row3(2); } - inline vector3_base<T> get_translation() const { return get_column3(3); } - - // - void unit() - { - m[0][1] = m[0][2] = m[0][3] = 0; - m[1][0] = m[1][2] = m[1][3] = 0; - m[2][0] = m[2][1] = m[2][3] = 0; - m[3][0] = m[3][1] = m[3][2] = 0; - - m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1; - } - - // - vector3_base<T> operator *(const vector3_base<T> &v) const - { - vector3_base<T> r(0,0,0); - - r.x += v.x*m[0][0] + v.y*m[1][0] + v.z*m[2][0] + m[3][0]; - r.y += v.x*m[0][1] + v.y*m[1][1] + v.z*m[2][1] + m[3][1]; - r.z += v.x*m[0][2] + v.y*m[1][2] + v.z*m[2][2] + m[3][2]; - return r; - } - - // - vector4_base<T> operator *(const vector4_base<T> &v) const - { - vector4_base<T> r(0,0,0,0); - - r.x += v.x*m[0][0] + v.y*m[1][0] + v.z*m[2][0] + v.w*m[3][0]; - r.y += v.x*m[0][1] + v.y*m[1][1] + v.z*m[2][1] + v.w*m[3][1]; - r.z += v.x*m[0][2] + v.y*m[1][2] + v.z*m[2][2] + v.w*m[3][2]; - r.w += v.x*m[0][3] + v.y*m[1][3] + v.z*m[2][3] + v.w*m[3][3]; - return r; - } - // - matrix4_base operator *(const matrix4_base &other) const - { - matrix4_base r; - - for(int i = 0; i < 4; i++) - for(int j = 0; j < 4; j++) - { - r.m[i][j] = 0; - for(int a = 0; a < 4; a++) - r.m[i][j] += m[a][j] * other.m[i][a]; - } - return r; - } - - - // - // THIS PART IS KINDA UGLY BECAUSE MAT4 IS NOT IMMUTABLE - // - - inline void set_row(const vector3_base<T>& v, const int row) - { - m[0][row] = v.x; - m[1][row] = v.y; - m[2][row] = v.z; - } - - inline void set_column(const vector3_base<T>& v, const int col) - { - m[col][0] = v.x; - m[col][1] = v.y; - m[col][2] = v.z; - } - - inline void set_translation(const vector3_base<T>& v) { set_column(v,3); } - - // - void rot_x(T angle) - { - T sina = (T)sin(angle); - T cosa = (T)cos(angle); - - unit(); - m[1][1] = cosa; m[2][1] =-sina; - m[1][2] = sina; m[2][2] = cosa; - } - - // - void rot_y(T angle) - { - T sina = (T)sin(-angle); - T cosa = (T)cos(-angle); - - unit(); - m[0][0] = cosa; m[2][0] =-sina; - m[0][2] = sina; m[2][2] = cosa; - } - - // - void rot_z(T angle) - { - T sina = (T)sin(angle); - T cosa = (T)cos(angle); - - unit(); - m[0][0] = cosa; m[1][0] =-sina; - m[0][1] = sina; m[1][1] = cosa; - } -}; - -typedef matrix4_base<float> mat4; - -#endif diff --git a/src/base/tl/quat.hpp b/src/base/tl/quat.hpp deleted file mode 100644 index 2f381e11..00000000 --- a/src/base/tl/quat.hpp +++ /dev/null @@ -1,211 +0,0 @@ - - -template<class T> -class quaternion_base -{ -public: - T k[4]; - - /*void Unit() - { - k[0] = 0; - k[1] = 0; - k[2] = 0; - k[3] = 1; - }*/ - - inline quaternion_base(){} - - inline quaternion_base(T x, T y, T z, T w) - { - k[0] = x; - k[1] = y; - k[2] = z; - k[3] = w; - } - - inline quaternion_base(vector3_base<T> axis, T angle) - { - T sin_angle = sin(angle * (T)0.5); - T cos_angle = cos(angle * (T)0.5); - k[0] = axis.x * sin_angle; - k[1] = axis.y * sin_angle; - k[2] = axis.z * sin_angle; - k[3] = cos_angle; - } - - - T magnitude() - { - return sqrt(k[0] * k[0] + k[1] * k[1] + k[2] * k[2] + k[3] * k[3]); - } - - matrix4_base<T> create_matrix() const - { - matrix4_base<T> mat; - - T xx = k[0] * k[0]; - T xy = k[0] * k[1]; - T xz = k[0] * k[2]; - T xw = k[0] * k[3]; - T yy = k[1] * k[1]; - T yz = k[1] * k[2]; - T yw = k[1] * k[3]; - T zz = k[2] * k[2]; - T zw = k[2] * k[3]; - - mat.k[0][0] = 1 - 2 * (yy + zz); - mat.k[0][1] = 2 * (xy + zw); - mat.k[0][2] = 2 * (xz - yw); - mat.k[0][3] = 0; - - mat.k[1][0] = 2 * (xy - zw); - mat.k[1][1] = 1 - 2 * (xx + zz); - mat.k[1][2] = 2 * (yz + xw); - mat.k[1][3] = 0; - - mat.k[2][0] = 2 * (xz + yw); - mat.k[2][1] = 2 * (yz - xw); - mat.k[2][2] = 1 - 2 * (xx + yy); - mat.k[2][3] = 0; - - mat.k[3][0] = 0; - mat.k[3][1] = 0; - mat.k[3][2] = 0; - mat.k[3][3] = 1; - } - - /* - void CreateDOOM(T x, T y, T z) - { - k[0] = x; - k[1] = y; - k[2] = z; - T Term = 1 - (x * x) - (y * y) - (z * z); - if (Term < 0) - k[3] = 0; - else - k[3] = -sqrt(Term); - - Normalize(); - } - - T DotProd(const TQuaternion<T>& Quat) const - { - return (k[0] * Quat.k[0] + k[1] * Quat.k[1] + k[2] * Quat.k[2] + k[3] * Quat.k[3]); - } - - void Interpolate(const TQuaternion<T>& Quat, TQuaternion& Dest, T Scale) - { - T Separation = k[0] * Quat.k[0] + k[1] * Quat.k[1] + k[2] * Quat.k[2] + k[3] * Quat.k[3]; - T Factor1,Factor2; - - if (Separation > 1) - Separation = 1; - if (Separation < -1) - Separation = -1; - Separation = acos(Separation); - if (Separation == 0 || Separation == pi) - { - Factor1 = 1; - Factor2 = 0; - } - else - { - Factor1 = sin((1 - Scale)*Separation) / sin(Separation); - Factor2 = sin(Scale * Separation) / sin(Separation); - } - - Dest.k[0] = k[0] * Factor1 + Quat.k[0] * Factor2; - Dest.k[1] = k[1] * Factor1 + Quat.k[1] * Factor2; - Dest.k[2] = k[2] * Factor1 + Quat.k[2] * Factor2; - Dest.k[3] = k[3] * Factor1 + Quat.k[3] * Factor2; - } - - void Slerp(const TQuaternion<T>& Quat, TQuaternion& Dest, T Scale) const - { - T Sq1,Sq2; - T Dot = DotProd(Quat); - - TQuaternion Temp; - - if (Dot < 0.0f) - { - Dot = -Dot; - Temp.k[0] = -Quat.k[0]; - Temp.k[1] = -Quat.k[1]; - Temp.k[2] = -Quat.k[2]; - Temp.k[3] = -Quat.k[3]; - } - else - { - Temp = Quat; - } - - if ((1.0 + Dot) > 0.00001) - { - if ((1.0 - Dot) > 0.00001) - { - T om = (T)acos(Dot); - T rsinom = (T)(1.0f / sin(om)); - Sq1 = (T)sin(((T)1.0 - Scale) * om) * rsinom; - Sq2 = (T)sin(Scale * om) * rsinom; - } - else - { - Sq1 = (T)(1.0 - Scale); - Sq2 = Scale; - } - Dest.k[0] = Sq1 * k[0] + Sq2 * Temp[0]; - Dest.k[1] = Sq1 * k[1] + Sq2 * Temp[1]; - Dest.k[2] = Sq1 * k[2] + Sq2 * Temp[2]; - Dest.k[3] = Sq1 * k[3] + Sq2 * Temp[3]; - } - else - { - Sq1 = (T)sin(((T)1.0 - Scale) * (T)0.5 * pi); - Sq2 = (T)sin(Scale * (T)0.5 * pi); - - Dest.k[0] = Sq1 * k[0] + Sq2 * Temp[1]; - Dest.k[1] = Sq1 * k[1] + Sq2 * Temp[0]; - Dest.k[2] = Sq1 * k[2] + Sq2 * Temp[3]; - Dest.k[3] = Sq1 * k[3] + Sq2 * Temp[2]; - } - }*/ - - // perators - T& operator [] (int i) { return k[i]; } - - // quaternion multiply - quaternion_base operator *(const quaternion_base& other) const - { - // (w1 dot w2 - v1 dot v2, w1 dot v2 + w2 dot v1 + v1 cross v2) - quaternion_base r; - r.k[0] = k[3] * other.k[0] + k[0] * other.k[3] + k[1] * other.k[2] - k[2] * other.k[1]; - r.k[1] = k[3] * other.k[1] + k[1] * other.k[3] + k[2] * other.k[0] - k[0] * other.k[2]; - r.k[2] = k[3] * other.k[2] + k[2] * other.k[3] + k[0] * other.k[1] - k[1] * other.k[0]; - r.k[3] = k[3] * other.k[3] - k[0] * other.k[0] - k[1] * other.k[1] - k[2] * other.k[2]; - - return normalize(r); - } - - /* - bool operator == (const quaternion_base<T>& t) const { return ((k[0] == t.k[0]) && (k[1] == t.k[1]) && (k[2] == t.k[2]) && (k[3] == t.k[3])); } - bool operator != (const quaternion_base<T>& t) const { return ((k[0] != t.k[0]) || (k[1] != t.k[1]) || (k[2] != t.k[2]) || (k[3] != t.k[3])); } - - void operator = (const quaternion_base<T>& other) { k[0] = other.k[0]; k[1] = other.k[1]; k[2] = other.k[2]; k[3] = other.k[3]; } - */ - - /*void operator *= (const TQuaternion<T>& t) { TQuaternion Temp = Multiply(t); *this = Temp; } - TQuaternion operator * (const TQuaternion<T>& t) const { return Multiply(t); } - */ -}; - -template<typename T> -inline quaternion_base<T> normalize(const quaternion_base<T> &v) -{ - T factor = 1.0f/v.magnitude(); - return quaternion_base<T>(v.k[0]*factor, v.k[1]*factor,v. k[2]*factor,v. k[3]*factor); -} - - diff --git a/src/base/tl/range.hpp b/src/base/tl/range.h index 559daffa..1c63e73c 100644 --- a/src/base/tl/range.hpp +++ b/src/base/tl/range.h @@ -1,7 +1,7 @@ #ifndef TL_FILE_RANGE_HPP #define TL_FILE_RANGE_HPP -#include "base.hpp" +#include "base.h" /* Group: Range concepts diff --git a/src/base/tl/sorted_array.hpp b/src/base/tl/sorted_array.h index 30c1df24..95f06157 100644 --- a/src/base/tl/sorted_array.hpp +++ b/src/base/tl/sorted_array.h @@ -1,8 +1,8 @@ #ifndef TL_FILE_SORTED_ARRAY_HPP #define TL_FILE_SORTED_ARRAY_HPP -#include "algorithm.hpp" -#include "array.hpp" +#include "algorithm.h" +#include "array.h" template <class T, class ALLOCATOR = allocator_default<T> > class sorted_array : public array<T, ALLOCATOR> diff --git a/src/base/tl/stream.hpp b/src/base/tl/stream.hpp deleted file mode 100644 index c307b968..00000000 --- a/src/base/tl/stream.hpp +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef TL_FILE_STREAM_HPP -#define TL_FILE_STREAM_HPP - -class input_stream -{ -public: - virtual ~input_stream() {} - virtual size_t read(void *data, size_t size) = 0; - virtual size_t size() = 0; -}; - -class output_stream -{ -public: - virtual ~output_stream() {} - virtual size_t write(const void *data, size_t size) = 0; -}; - - -// input wrapping -// RAII style -class file_backend -{ -private: - file_backend(const file_backend &other) { /* no copy allowed */ } -protected: - IOHANDLE file_handle; - - explicit file_backend(const char *filename, int flags) - { - file_handle = io_open(filename, flags); - } - - ~file_backend() - { - if(file_handle) - io_close(file_handle); - } -public: - bool is_open() const { return file_handle != 0; } -}; - -class file_reader : public input_stream, public file_backend -{ -public: - explicit file_reader(const char *filename) - : file_backend(filename, IOFLAG_READ) - {} - - virtual size_t read(void *data, size_t size) { return io_read(file_handle, data, size); } - virtual size_t size() { return io_length(file_handle); } -}; - - -class file_writer : public output_stream, public file_backend -{ -public: - explicit file_writer(const char *filename) - : file_backend(filename, IOFLAG_WRITE) - {} - - virtual size_t write(const void *data, size_t size) { return io_write(file_handle, data, size); } -}; - -#endif diff --git a/src/base/tl/string.hpp b/src/base/tl/string.h index 2b164091..155ca2a4 100644 --- a/src/base/tl/string.hpp +++ b/src/base/tl/string.h @@ -1,8 +1,8 @@ #ifndef TL_FILE_STRING_HPP #define TL_FILE_STRING_HPP -#include "base.hpp" -#include "allocator.hpp" +#include "base.h" +#include "allocator.h" template<class ALLOCATOR > class string_base : private ALLOCATOR diff --git a/src/base/tl/vector.hpp b/src/base/tl/vector.hpp deleted file mode 100644 index 1c1bb804..00000000 --- a/src/base/tl/vector.hpp +++ /dev/null @@ -1,198 +0,0 @@ -/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ -#ifndef TL_FILE_VECTOR_HPP -#define TL_FILE_VECTOR_HPP - -#include <math.h> - -// ------------------------------------ - -template<typename T> -class vector2_base -{ -public: - union { T x,u; }; - union { T y,v; }; - - vector2_base() {} - vector2_base(float nx, float ny) - { - x = nx; - y = ny; - } - - vector2_base operator -() const { return vector2_base(-x, -y); } - vector2_base operator -(const vector2_base &v) const { return vector2_base(x-v.x, y-v.y); } - vector2_base operator +(const vector2_base &v) const { return vector2_base(x+v.x, y+v.y); } - vector2_base operator *(const T v) const { return vector2_base(x*v, y*v); } - - const vector2_base &operator =(const vector2_base &v) { x = v.x; y = v.y; return *this; } - - const vector2_base &operator +=(const vector2_base &v) { x += v.x; y += v.y; return *this; } - const vector2_base &operator -=(const vector2_base &v) { x -= v.x; y -= v.y; return *this; } - const vector2_base &operator *=(const T v) { x *= v; y *= v; return *this; } - - bool operator ==(const vector2_base &v) const { return x == v.x && y == v.y; } //TODO: do this with an eps instead - - operator const T* () { return &x; } -}; - - -template<typename T> -inline T length(const vector2_base<T> &a) -{ - return sqrtf(a.x*a.x + a.y*a.y); -} - -template<typename T> -inline T distance(const vector2_base<T> a, const vector2_base<T> &b) -{ - return length(a-b); -} - -template<typename T> -inline T dot(const vector2_base<T> a, const vector2_base<T> &b) -{ - return a.x*b.x + a.y*b.y; -} - -template<typename T> -inline vector2_base<T> normalize(const vector2_base<T> &v) -{ - T l = (T)(1.0f/sqrtf(v.x*v.x + v.y*v.y)); - return vector2_base<T>(v.x*l, v.y*l); -} - -typedef vector2_base<float> vec2; -typedef vector2_base<bool> bvec2; -typedef vector2_base<int> ivec2; - -template<typename T> -inline vector2_base<T> closest_point_on_line(vector2_base<T> line_point0, vector2_base<T> line_point1, vector2_base<T> target_point) -{ - vector2_base<T> c = target_point - line_point0; - vector2_base<T> v = (line_point1 - line_point0); - v = normalize(v); - T d = length(line_point0-line_point1); - T t = dot(v, c)/d; - return mix(line_point0, line_point1, clamp(t, (T)0, (T)1)); - /* - if (t < 0) t = 0; - if (t > 1.0f) return 1.0f; - return t;*/ -} - -// ------------------------------------ -template<typename T> -class vector3_base -{ -public: - union { T x,r,h; }; - union { T y,g,s; }; - union { T z,b,v,l; }; - - vector3_base() {} - vector3_base(float nx, float ny, float nz) - { - x = nx; - y = ny; - z = nz; - } - - const vector3_base &operator =(const vector3_base &v) { x = v.x; y = v.y; z = v.z; return *this; } - - vector3_base operator -(const vector3_base &v) const { return vector3_base(x-v.x, y-v.y, z-v.z); } - vector3_base operator -() const { return vector3_base(-x, -y, -z); } - vector3_base operator +(const vector3_base &v) const { return vector3_base(x+v.x, y+v.y, z+v.z); } - vector3_base operator *(const T v) const { return vector3_base(x*v, y*v, z*v); } - vector3_base operator *(const vector3_base &v) const { return vector3_base(x*v.x, y*v.y, z*v.z); } - vector3_base operator /(const T v) const { return vector3_base(x/v, y/v, z/v); } - - const vector3_base &operator +=(const vector3_base &v) { x += v.x; y += v.y; z += v.z; return *this; } - const vector3_base &operator -=(const vector3_base &v) { x -= v.x; y -= v.y; z -= v.z; return *this; } - const vector3_base &operator *=(const T v) { x *= v; y *= v; z *= v; return *this; } - - bool operator ==(const vector3_base &v) const { return x == v.x && y == v.y && z == v.z; } //TODO: do this with an eps instead - - operator const T* () { return &x; } -}; - -template<typename T> -inline T length(const vector3_base<T> &a) -{ - return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z); -} - -template<typename T> -inline T distance(const vector3_base<T> &a, const vector3_base<T> &b) -{ - return length(a-b); -} - -template<typename T> -inline T dot(const vector3_base<T> &a, const vector3_base<T> &b) -{ - return a.x*b.x + a.y*b.y + a.z*b.z; -} - -template<typename T> -inline vector3_base<T> normalize(const vector3_base<T> &v) -{ - T l = (T)(1.0f/sqrtf(v.x*v.x + v.y*v.y + v.z*v.z)); - return vector3_base<T>(v.x*l, v.y*l, v.z*l); -} - -template<typename T> -inline vector3_base<T> cross(const vector3_base<T> &a, const vector3_base<T> &b) -{ - return vector3_base<T>( - a.y*b.z - a.z*b.y, - a.z*b.x - a.x*b.z, - a.x*b.y - a.y*b.x); -} - -typedef vector3_base<float> vec3; -typedef vector3_base<bool> bvec3; -typedef vector3_base<int> ivec3; - -// ------------------------------------ - -template<typename T> -class vector4_base -{ -public: - union { T x,r; }; - union { T y,g; }; - union { T z,b; }; - union { T w,a; }; - - vector4_base() {} - vector4_base(float nx, float ny, float nz, float nw) - { - x = nx; - y = ny; - z = nz; - w = nw; - } - - vector4_base operator +(const vector4_base &v) const { return vector4_base(x+v.x, y+v.y, z+v.z, w+v.w); } - vector4_base operator -(const vector4_base &v) const { return vector4_base(x-v.x, y-v.y, z-v.z, w-v.w); } - vector4_base operator -() const { return vector4_base(-x, -y, -z, -w); } - vector4_base operator *(const vector4_base &v) const { return vector4_base(x*v.x, y*v.y, z*v.z, w*v.w); } - vector4_base operator *(const T v) const { return vector4_base(x*v, y*v, z*v, w*v); } - - const vector4_base &operator =(const vector4_base &v) { x = v.x; y = v.y; z = v.z; w = v.w; return *this; } - - const vector4_base &operator +=(const vector4_base &v) { x += v.x; y += v.y; z += v.z; w += v.w; return *this; } - const vector4_base &operator -=(const vector4_base &v) { x -= v.x; y -= v.y; z -= v.z; w -= v.w; return *this; } - const vector4_base &operator *=(const T v) { x *= v; y *= v; z *= v; w *= v; return *this; } - - bool operator ==(const vector4_base &v) const { return x == v.x && y == v.y && z == v.z && w == v.w; } //TODO: do this with an eps instead - - operator const T* () { return &x; } -}; - -typedef vector4_base<float> vec4; -typedef vector4_base<bool> bvec4; -typedef vector4_base<int> ivec4; - -#endif diff --git a/src/base/vmath.hpp b/src/base/vmath.h index 49dd26d1..49dd26d1 100644 --- a/src/base/vmath.hpp +++ b/src/base/vmath.h |