Sun, 11 Aug 2013 03:06:54 +0300
now with 3691% extra legalese!
13
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
1 | /* |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
2 | * ZanDemo: Zandronum demo launcher |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
3 | * Copyright (C) 2013 Santeri Piippo |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
4 | * |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
8 | * (at your option) any later version. |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
9 | * |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
13 | * GNU General Public License for more details. |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
14 | * |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
17 | */ |
9bdddd2ccde6
now with 3691% extra legalese!
Teemu Piippo <crimsondusk64@gmail.com>
parents:
6
diff
changeset
|
18 | |
0 | 19 | #ifndef TYPES_H |
20 | #define TYPES_H | |
21 | ||
22 | #include "main.h" | |
23 | #include <QString> | |
24 | #include <QList> | |
3
d0b278fd29d5
Implemented wad path list
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1
diff
changeset
|
25 | #include <QVariant> |
0 | 26 | |
27 | typedef QString str; | |
28 | typedef QChar qchar; | |
3
d0b278fd29d5
Implemented wad path list
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1
diff
changeset
|
29 | typedef QVariant var; |
0 | 30 | template<class T> using list = QList<T>; |
31 | typedef unsigned int uint; | |
32 | typedef unsigned short ushort; | |
33 | typedef unsigned long ulong; | |
34 | template<class T> using initlist = std::initializer_list<T>; | |
35 | using std::size_t; | |
36 | ||
6
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
37 | typedef qint8 int8; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
38 | typedef qint16 int16; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
39 | typedef qint32 int32; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
40 | typedef qint64 int64; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
41 | typedef quint8 uint8; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
42 | typedef quint16 uint16; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
43 | typedef quint32 uint32; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
44 | typedef quint64 uint64; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
45 | |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
46 | #ifdef IN_IDE_PARSER // :| |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
47 | typedef void FILE; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
48 | #endif |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
49 | |
0 | 50 | // ============================================================================= |
51 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | |
52 | // ============================================================================= | |
53 | // StringFormatArg | |
54 | // | |
55 | // Converts a given value into a string that can be retrieved with ::value (). | |
56 | // Used as the argument type to the formatting functions, hence its name. | |
57 | // ============================================================================= | |
58 | class StringFormatArg { | |
59 | public: | |
60 | StringFormatArg( const str& v ); | |
61 | StringFormatArg( const char& v ); | |
62 | StringFormatArg( const uchar& v ); | |
63 | StringFormatArg( const qchar& v ); | |
64 | ||
65 | #define NUMERIC_FORMAT_ARG(T,C) \ | |
66 | StringFormatArg (const T& v) { \ | |
67 | char valstr[32]; \ | |
68 | sprintf (valstr, "%" #C, v); \ | |
69 | m_val = valstr; \ | |
70 | } | |
71 | ||
72 | NUMERIC_FORMAT_ARG( int, d ) | |
73 | NUMERIC_FORMAT_ARG( short, d ) | |
74 | NUMERIC_FORMAT_ARG( long, ld ) | |
75 | NUMERIC_FORMAT_ARG( uint, u ) | |
76 | NUMERIC_FORMAT_ARG( ushort, u ) | |
77 | NUMERIC_FORMAT_ARG( ulong, lu ) | |
78 | ||
79 | StringFormatArg( const float& v ); | |
80 | StringFormatArg( const double& v ); | |
81 | StringFormatArg( const char* v ); | |
82 | StringFormatArg( const void* v ); | |
83 | ||
84 | template<class T> StringFormatArg( const list<T>& v ) { | |
85 | m_val = "{ "; | |
86 | uint i = 0; | |
6
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
87 | const bool isString = typeid( T ) == typeid( str ); |
0 | 88 | |
89 | for( const T& it : v ) { | |
90 | if( i++ ) | |
91 | m_val += ", "; | |
92 | ||
93 | StringFormatArg arg( it ); | |
6
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
94 | |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
95 | if( isString ) |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
96 | m_val += "\"" + arg.value() + "\""; |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
97 | else |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
98 | m_val += arg.value(); |
0 | 99 | } |
100 | ||
101 | if( i ) | |
102 | m_val += " "; | |
103 | ||
104 | m_val += "}"; | |
105 | } | |
106 | ||
107 | str value() const { | |
108 | return m_val; | |
109 | } | |
110 | private: | |
111 | str m_val; | |
112 | }; | |
113 | ||
114 | // Formatter function | |
1 | 115 | str doFormat( initlist<StringFormatArg> args ); |
0 | 116 | |
117 | // printf replacement | |
6
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
118 | void doPrint( FILE* fp, initlist<StringFormatArg> args ); |
0 | 119 | |
120 | // Macros to access these functions | |
121 | #ifndef IN_IDE_PARSER | |
122 | # define fmt(...) doFormat({ __VA_ARGS__ }) | |
6
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
123 | # define print(...) doPrint( stdout, { __VA_ARGS__ }) |
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
124 | # define fprint(FP, ...) doPrint( FP, { __VA_ARGS__ }) |
0 | 125 | #else |
126 | str fmt( const char* fmtstr, ... ); | |
127 | void print( const char* fmtstr, ... ); | |
6
67b6ef6917ba
Now capable of actually launching demos
Teemu Piippo <crimsondusk64@gmail.com>
parents:
3
diff
changeset
|
128 | void fprint( FILE* fp, const char* fmtstr, ... ); |
0 | 129 | #endif |
130 | ||
131 | #endif // TYPES_H |