diff -r 9374fea8f77f -r f1b8cb53d2a2 src/misc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/misc.h Wed May 08 15:19:06 2013 +0300 @@ -0,0 +1,110 @@ +/* + * LDForge: LDraw parts authoring CAD + * Copyright (C) 2013 Santeri Piippo + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MISC_H +#define MISC_H + +#include "common.h" +#include "str.h" +#include "config.h" + +#define NUM_PRIMES 500 + +class QColor; +class QAction; + +// Prime numbers +extern const ushort g_uaPrimes[NUM_PRIMES]; + +// Returns whether a given string represents a floating point number. +bool isNumber (str& zToken); + +// Converts a float value to a string value. +str ftoa (double fCoord); + +// Simplifies the given fraction. +void simplify (short& dNum, short& dDenom); + +// Grid stuff +typedef struct { + const char* const name; + floatconfig* const confs[4]; + QAction** const actionptr; +} gridinfo; + +extern_cfg (int, grid); +static const short g_NumGrids = 3; +extern const gridinfo g_GridInfo[3]; + +inline const gridinfo& currentGrid () { + return g_GridInfo[grid]; +} + +namespace Grid { + enum Type { + Coarse, + Medium, + Fine + }; + + enum Config { + X, + Y, + Z, + Angle + }; + + double snap (double value, const Grid::Config axis); +}; + +// ============================================================================= +template void dataswap (T& a, T& b) { + T c = a; + a = b; + b = c; +} + +// ============================================================================= +// StringParser +// +// String parsing utility +// ============================================================================= +class StringParser { +public: + std::vector zaTokens; + short dPos; + + StringParser (str zInText, char cSeparator); + + bool atEnd (); + bool atBeginning (); + bool next (str& zVal); + bool peekNext (str& zVal); + bool getToken (str& zVal, const ushort uInPos); + bool findToken (short& dResult, char const* sNeedle, short dArgs); + size_t size (); + void rewind (); + void seek (short dAmount, bool bRelative); + bool tokenCompare (short int dInPos, const char* sOther); + + str operator[] (const size_t uIndex) { + return zaTokens[uIndex]; + } +}; + +#endif // MISC_H \ No newline at end of file