summaryrefslogtreecommitdiff
path: root/shared/globalFunctions.h
diff options
context:
space:
mode:
Diffstat (limited to 'shared/globalFunctions.h')
-rw-r--r--shared/globalFunctions.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/shared/globalFunctions.h b/shared/globalFunctions.h
new file mode 100644
index 00000000..00566b5f
--- /dev/null
+++ b/shared/globalFunctions.h
@@ -0,0 +1,167 @@
+#ifndef GLOBALFUNCTIONS_H_INCLUDED
+#define GLOBALFUNCTIONS_H_INCLUDED
+
+#include <string>
+#include <algorithm>
+#include <vector>
+#include <set>
+#include <wx/string.h>
+#include <wx/longlong.h>
+#include <memory>
+#include <sstream>
+
+class wxInputStream;
+class wxOutputStream;
+class wxStopWatch;
+
+
+namespace globalFunctions
+{
+//------------------------------------------------
+// GLOBALS
+//------------------------------------------------
+#ifdef FFS_WIN
+ const wxChar FILE_NAME_SEPARATOR = '\\';
+ static const wxChar* const LINE_BREAK = wxT("\r\n"); //internal linkage
+#elif defined FFS_LINUX
+ const wxChar FILE_NAME_SEPARATOR = '/';
+ static const wxChar* const LINE_BREAK = wxT("\n");
+#endif
+
+//------------------------------------------------
+// FUNCTIONS
+//------------------------------------------------
+ inline
+ int round(double d) //little rounding function
+ {
+ return static_cast<int>(d < 0 ? d - .5 : d + .5);
+ }
+
+ template <class T>
+ inline
+ T abs(const T& d) //absolute value
+ {
+ return(d < 0 ? -d : d);
+ }
+
+ template <class T>
+ inline std::string numberToString(const T& number) //convert number to string the C++ way
+ {
+ std::stringstream ss;
+ ss << number;
+ return ss.str();
+ }
+
+ wxString numberToWxString(const unsigned int number); //convert number to wxString
+ wxString numberToWxString(const int number); //convert number to wxString
+ wxString numberToWxString(const float number); //convert number to wxString
+
+ int stringToInt( const std::string& number); //convert String to number
+ long stringToLong( const std::string& number); //convert String to number
+ double stringToDouble(const std::string& number); //convert String to number
+
+ int wxStringToInt( const wxString& number); //convert wxString to number
+ double wxStringToDouble(const wxString& number); //convert wxString to number
+
+ unsigned int getDigitCount(const unsigned int number); //count number of digits
+
+ int readInt(std::ifstream& stream); //read int from file stream
+ void writeInt(std::ofstream& stream, const int number); //write int to filestream
+
+ int readInt(wxInputStream& stream); //read int from file stream
+ void writeInt(wxOutputStream& stream, const int number); //write int to filestream
+
+ inline
+ wxLongLong convertToSigned(const wxULongLong number)
+ {
+ return wxLongLong(number.GetHi(), number.GetLo());
+ }
+
+
+ //Note: the following lines are a performance optimization for deleting elements from a vector. It is incredibly faster to create a new
+//vector and leave specific elements out than to delete row by row and force recopying of most elements for each single deletion (linear vs quadratic runtime)
+ template <class T>
+ void removeRowsFromVector(const std::set<int>& rowsToRemove, std::vector<T>& grid)
+ {
+ if (rowsToRemove.size() > 0)
+ {
+ std::vector<T> temp;
+
+ std::set<int>::const_iterator rowToSkipIndex = rowsToRemove.begin();
+ int rowToSkip = *rowToSkipIndex;
+
+ for (int i = 0; i < int(grid.size()); ++i)
+ {
+ if (i != rowToSkip)
+ temp.push_back(grid[i]);
+ else
+ {
+ ++rowToSkipIndex;
+ if (rowToSkipIndex != rowsToRemove.end())
+ rowToSkip = *rowToSkipIndex;
+ }
+ }
+ grid.swap(temp);
+ }
+ }
+}
+
+
+//############################################################################
+class Performance
+{
+public:
+ wxDEPRECATED(Performance()); //generate compiler warnings as a reminder to remove code after measurements
+ ~Performance();
+ void showResult();
+
+private:
+ bool resultWasShown;
+ std::auto_ptr<wxStopWatch> timer;
+};
+
+//two macros for quick performance measurements
+#define PERF_START Performance a;
+#define PERF_STOP a.showResult();
+
+
+//############################################################################
+class wxFile;
+class DebugLog
+{
+public:
+ wxDEPRECATED(DebugLog());
+ ~DebugLog();
+ void write(const wxString& logText);
+
+private:
+ wxString assembleFileName();
+ wxString logfileName;
+ int lineCount;
+ wxFile* logFile; //logFile.close(); <- not needed
+};
+extern DebugLog logDebugInfo;
+wxString getCodeLocation(const wxString file, const int line);
+
+//small macro for writing debug information into a logfile
+#define WRITE_DEBUG_LOG(x) logDebugInfo.write(getCodeLocation(__TFILE__, __LINE__) + x);
+//speed alternative: wxLogDebug(wxT("text")) + DebugView
+
+
+//############################################################################
+class RuntimeException //Exception class used to notify of general runtime exceptions
+{
+public:
+ RuntimeException(const wxString& txt) : errorMessage(txt) {}
+
+ wxString show() const
+ {
+ return errorMessage;
+ }
+
+private:
+ wxString errorMessage;
+};
+
+
+#endif // GLOBALFUNCTIONS_H_INCLUDED
bgstack15