| /** |
| * projectM -- Milkdrop-esque visualisation SDK |
| * Copyright (C)2003-2007 projectM Team |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * See 'LICENSE.txt' included within this release |
| * |
| */ |
| /** |
| * $Id$ |
| * |
| * $Log$ |
| */ |
| |
| #ifndef COMMON_HPP |
| #define COMMON_HPP |
| |
| #include <vector> |
| #include <typeinfo> |
| #include <cstdarg> |
| #include <cassert> |
| |
| #ifdef _MSC_sVER |
| #define strcasecmp(s, t) _strcmpi(s, t) |
| #endif |
| |
| #ifdef _MSC_VER |
| #pragma warning( disable : 4244 4305 4996; once : 4018 ) |
| #define WIN32_LEAN_AND_MEAN |
| #define NOMINMAX |
| #include <windows.h> |
| typedef unsigned int uint; |
| #endif |
| |
| #ifdef DEBUG |
| //extern FILE *debugFile; |
| #endif |
| |
| #ifdef MACOS |
| #include <cstdio> |
| extern FILE *fmemopen (void *buf, size_t len, const char *pMode); |
| #endif /** MACOS */ |
| |
| #include "dlldefs.h" |
| |
| #define DEFAULT_FONT_PATH "/home/carm/fonts/courier1.glf" |
| #define MAX_TOKEN_SIZE 512 |
| #define MAX_PATH_SIZE 4096 |
| |
| #define STRING_BUFFER_SIZE 1024*150 |
| #define STRING_LINE_SIZE 1024 |
| |
| |
| #ifdef LINUX |
| #include <cstdlib> |
| #define projectM_isnan std::isnan |
| #define projectM_fmax fmax |
| #define projectM_fmin fmin |
| #endif |
| |
| #ifdef WIN32 |
| #define projectM_isnan(x) ((x) != (x)) |
| #define projectM_fmax(x,y) ((x) >= (y) ? (x): (y)) |
| #define projectM_fmin(x,y) ((x) <= (y) ? (x): (y)) |
| #endif |
| |
| #ifdef MACOS |
| #define projectM_isnan(x) ((x) != (x)) |
| #define projectM_fmax(x,y) ((x) >= (y) ? (x): (y)) |
| #define projectM_fmin(x,y) ((x) <= (y) ? (x): (y)) |
| #endif |
| |
| #ifndef TRUE |
| #define TRUE true |
| #endif |
| |
| #ifndef FALSE |
| #define FALSE false |
| #endif |
| |
| |
| #define MAX_DOUBLE_SIZE 10000000.0 |
| #define MIN_DOUBLE_SIZE -10000000.0 |
| |
| #define MAX_INT_SIZE 10000000 |
| #define MIN_INT_SIZE -10000000 |
| |
| /* default float initial value */ |
| #define DEFAULT_DOUBLE_IV 0.0 |
| |
| /* default float lower bound */ |
| #define DEFAULT_DOUBLE_LB MIN_DOUBLE_SIZE |
| |
| /* default float upper bound */ |
| #define DEFAULT_DOUBLE_UB MAX_DOUBLE_SIZE |
| |
| #ifdef WIN32 |
| #include <float.h> |
| #define isnan _isnan |
| #endif /** WIN32 */ |
| |
| /** Per-platform path separators */ |
| #define WIN32_PATH_SEPARATOR '\\' |
| #define UNIX_PATH_SEPARATOR '/' |
| #ifdef WIN32 |
| #define PATH_SEPARATOR WIN32_PATH_SEPARATOR |
| #else |
| #define PATH_SEPARATOR UNIX_PATH_SEPARATOR |
| #endif /** WIN32 */ |
| |
| #include <string> |
| |
| |
| const unsigned int NUM_Q_VARIABLES (32); |
| const std::string PROJECTM_FILE_EXTENSION ("prjm"); |
| const std::string MILKDROP_FILE_EXTENSION ("milk"); |
| const std::string PROJECTM_MODULE_EXTENSION ("so"); |
| |
| |
| template <class TraverseFunctor, class Container> |
| void traverse (Container & container) |
| { |
| TraverseFunctor functor; |
| |
| for (typename Container::iterator pos = container.begin (); |
| pos != container.end (); |
| ++pos) |
| { |
| assert (pos->second); |
| functor (pos->second); |
| } |
| |
| } |
| |
| |
| template <class TraverseFunctor, class Container> |
| void traverseVector (Container & container) |
| { |
| TraverseFunctor functor; |
| |
| for (typename Container::iterator pos = container.begin (); |
| pos != container.end (); |
| ++pos) |
| { |
| assert (*pos); |
| functor (*pos); |
| } |
| |
| } |
| |
| template <class TraverseFunctor, class Container> |
| void traverse (Container & container, TraverseFunctor & functor) |
| { |
| for (typename Container::iterator pos = container.begin (); |
| pos != container.end (); |
| ++pos) |
| { |
| assert (pos->second); |
| functor (pos->second); |
| } |
| |
| } |
| |
| namespace TraverseFunctors |
| { |
| template <class Data> |
| class Delete |
| { |
| |
| public: |
| |
| void |
| operator () (Data * data) |
| { |
| assert (data); |
| delete (data); |
| } |
| |
| }; |
| } /* namespace TraverseFunctors */ |
| |
| |
| inline std::string |
| parseExtension (const std::string & filename) { |
| const std::size_t start = filename.find_last_of ('.'); |
| |
| if (start == std::string::npos || start >= (filename.length ()-1)) |
| return ""; |
| else |
| return filename.substr (start+1, filename.length ()); |
| } |
| |
| inline std::string |
| parseFilename (const std::string & filename) { |
| const std::size_t start = filename.find_last_of ('/'); |
| |
| if (start == std::string::npos || start >= (filename.length ()-1)) |
| return ""; |
| else |
| return filename.substr (start+1, filename.length ()); |
| } |
| |
| inline double |
| meanSquaredError (const double & x, const double & y) { |
| return (x-y)*(x-y); |
| } |
| |
| |
| enum PresetRatingType { |
| FIRST_RATING_TYPE = 0, |
| HARD_CUT_RATING_TYPE = FIRST_RATING_TYPE, |
| SOFT_CUT_RATING_TYPE, |
| LAST_RATING_TYPE = SOFT_CUT_RATING_TYPE, |
| TOTAL_RATING_TYPES = SOFT_CUT_RATING_TYPE+1 |
| }; |
| |
| |
| typedef std::vector<int> RatingList; |
| |
| #endif |