src/basics.h

Mon, 19 Mar 2018 12:24:59 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Mon, 19 Mar 2018 12:24:59 +0200
changeset 1305
31627acdd4b5
parent 1291
9c570a30c98a
child 1308
dcc8c02530c2
permissions
-rw-r--r--

Bfc red/green view almost completely fixed

655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 * LDForge: LDraw parts authoring CAD
1072
9ce9496427f2 Happy new year 2017!
Teemu Piippo <teemu@hecknology.net>
parents: 1070
diff changeset
3 * Copyright (C) 2013 - 2017 Teemu Piippo
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 * This program is free software: you can redistribute it and/or modify
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
1006
a6b462051ae0 Copyright header fix, some minor stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1002
diff changeset
8 * (at your option) any later version.
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 * GNU General Public License for more details.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 */
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 #pragma once
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 #include <QString>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 #include <QObject>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 #include <QStringList>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 #include <QMetaType>
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
24 #include <QSet>
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
25 #include <QVector3D>
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
26 #include <QVector>
1136
9a7a945c0e93 Rearranged declarations in basics.h
Teemu Piippo <teemu@hecknology.net>
parents: 1135
diff changeset
27 #include <QFile>
1177
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1162
diff changeset
28 #include <QMatrix4x4>
920
147497785496 - fixed stability problems
Teemu Piippo <crimsondusk64@gmail.com>
parents: 890
diff changeset
29 #include <functional>
1058
695edd4f0411 Cleaned up crash catcher, fixed missing <math.h> include
Teemu Piippo <teemu@hecknology.net>
parents: 1056
diff changeset
30 #include <math.h>
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31 #include "macros.h"
1017
fc1c13db9618 Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1015
diff changeset
32 #include "transform.h"
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
33
1151
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1136
diff changeset
34 class Matrix;
1177
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1162
diff changeset
35 using GLRotationMatrix = QMatrix4x4;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 template<typename T, typename R>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 using Pair = std::pair<T, R>;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
39
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
40 enum Axis
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
41 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
42 X,
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43 Y,
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44 Z
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
45 };
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
46
1305
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
47 enum Winding
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
48 {
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
49 NoWinding,
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
50 CounterClockwise,
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
51 Clockwise,
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
52 };
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
53
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
54 Winding operator^(Winding one, Winding other);
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
55 Winding& operator^=(Winding& one, Winding other);
31627acdd4b5 Bfc red/green view almost completely fixed
Teemu Piippo <teemu@hecknology.net>
parents: 1291
diff changeset
56
794
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
57 //
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
58 // Derivative of QVector3D: this class is used for the vertices.
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
59 //
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
60 class Vertex : public QVector3D
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
61 {
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
62 public:
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
63 using ApplyFunction = std::function<void (Axis, double&)>;
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
64 using ApplyConstFunction = std::function<void (Axis, double)>;
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
65
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
66 Vertex();
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
67 Vertex (const QVector3D& a);
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
68 Vertex (qreal xpos, qreal ypos, qreal zpos);
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
69
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
70 void apply (ApplyFunction func);
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
71 void apply (ApplyConstFunction func) const;
789
4b7306f52bb5 - String -> QString
Santeri Piippo <crimsondusk64@gmail.com>
parents: 784
diff changeset
72 QString toString (bool mangled = false) const;
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
73 void transform (const Matrix& matr, const Vertex& pos);
1177
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1162
diff changeset
74 Vertex transformed(const GLRotationMatrix& matrix) const;
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
75 void setCoordinate (Axis ax, qreal value);
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
76
1002
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
77 Vertex& operator+= (const Vertex& other);
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
78 Vertex operator+ (const Vertex& other) const;
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
79 Vertex& operator*= (qreal scalar);
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
80 Vertex operator* (qreal scalar) const;
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
81 bool operator< (const Vertex& other) const;
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
82 double operator[] (Axis ax) const;
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
83 };
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
84
1002
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
85 inline Vertex operator* (qreal scalar, const Vertex& vertex)
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
86 {
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
87 return vertex * scalar;
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
88 }
a3ee23db8393 Bézier curves may now be serialized down using the "Demote" function. I need to rename that now.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 978
diff changeset
89
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
90 Q_DECLARE_METATYPE (Vertex)
1031
55c0d3beea0d removed removeDuplicates in favor of QSet, and the unused ObjectList class
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1026
diff changeset
91 uint qHash(const Vertex& key);
733
cc39df788660 - reimplemented the Vertex class as a derivative of QVector3D
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
92
1064
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
93 static inline qreal abs(const QVector3D &vector)
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
94 {
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
95 return vector.length();
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
96 }
4c7a353cf583 Replaced '.length()' with 'length()' where appropriate
Teemu Piippo <teemu@hecknology.net>
parents: 1063
diff changeset
97
794
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
98 //
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
99 // Defines a bounding box that encompasses a given set of objects.
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
100 // vertex0 is the minimum vertex, vertex1 is the maximum vertex.
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101 //
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1010
diff changeset
102 class BoundingBox
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 {
794
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
104 public:
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1010
diff changeset
105 BoundingBox();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106
1010
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
107 void calcVertex (const Vertex& vertex);
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
108 Vertex center() const;
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
109 bool isEmpty() const;
794
c254ddc6618b - source reformat
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
110 double longestMeasurement() const;
1010
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
111 void reset();
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
112 const Vertex& vertex0() const;
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
113 const Vertex& vertex1() const;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1010
diff changeset
115 BoundingBox& operator<< (const Vertex& v);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
116
1010
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
117 private:
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
118 bool m_isEmpty;
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
119 Vertex m_vertex0;
969b48eddd6b A bit more cleanup. Finally removed the PROPERTY macro. (now let's see about making a new one sometime that isn't so terrible?)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1006
diff changeset
120 Vertex m_vertex1;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121 };
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122
1026
fb320996cce0 Rename Pi to lowercase pi
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1017
diff changeset
123 static const double pi = 3.14159265358979323846;
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
124
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
125
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
126 // =============================================================================
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
127 // Plural expression
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 847
diff changeset
128 template<typename T>
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
129 static inline const char* plural (T n)
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
130 {
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
131 return (n != 1) ? "s" : "";
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
132 }
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
133
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 847
diff changeset
134 template<typename T>
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
135 bool isZero (T a)
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
136 {
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
137 return qFuzzyCompare (a + 1.0, 1.0);
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
138 }
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
139
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 847
diff changeset
140 template<typename T>
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
141 bool isInteger (T a)
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 847
diff changeset
142 {
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
143 return (qAbs (a - floor(a)) < 0.00001) or (qAbs (a - ceil(a)) < 0.00001);
847
274a7fac44fc - refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 844
diff changeset
144 }
274a7fac44fc - refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 844
diff changeset
145
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
146 //
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
147 // Returns true if first arg is equal to any of the other args
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
148 //
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
149 template<typename T, typename Arg, typename... Args>
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
150 bool isOneOf (T const& a, Arg const& arg, Args const&... args)
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
151 {
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
152 if (a == arg)
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
153 return true;
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
154
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
155 return isOneOf (a, args...);
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
156 }
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
157
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
158 template<typename T>
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 946
diff changeset
159 bool isOneOf (T const&)
816
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
160 {
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
161 return false;
9adb822de7b9 - refactor
Santeri Piippo <crimsondusk64@gmail.com>
parents: 794
diff changeset
162 }
1015
92c6ec099075 Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1014
diff changeset
163
92c6ec099075 Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1014
diff changeset
164 inline void toggle (bool& a)
92c6ec099075 Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1014
diff changeset
165 {
92c6ec099075 Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1014
diff changeset
166 a = not a;
92c6ec099075 Added triangle count to viewport, added compile-time line length check
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1014
diff changeset
167 }
1036
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
168
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
169 //
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
170 // Iterates an enum
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
171 //
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
172 template<typename Enum>
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
173 struct EnumIterShell
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
174 {
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
175 struct Iterator
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
176 {
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
177 Iterator(typename std::underlying_type<Enum>::type i) :
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
178 i(i) {}
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
179
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
180 Iterator& operator++() { ++i; return *this; }
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
181 bool operator==(Iterator other) { return i == other.i; }
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
182 bool operator!=(Iterator other) { return i != other.i; }
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
183 Enum operator*() const { return Enum(i); }
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
184
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
185 typename std::underlying_type<Enum>::type i;
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
186 };
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
187
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
188 Iterator begin()
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
189 {
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
190 return Iterator(EnumLimits<Enum>::First);
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
191 };
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
192
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
193 Iterator end()
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
194 {
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1122
diff changeset
195 return Iterator(EnumLimits<Enum>::Last + 1);
1036
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
196 }
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
197 };
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
198
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
199 template<typename Enum>
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
200 EnumIterShell<Enum> iterateEnum()
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
201 {
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
202 return EnumIterShell<Enum>();
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
203 }
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
204
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
205 // Is a value inside an enum?
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
206 template<typename Enum>
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1122
diff changeset
207 bool valueInEnum(Enum enumerator)
1036
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1031
diff changeset
208 {
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1122
diff changeset
209 typename std::underlying_type<Enum>::type index = static_cast<typename std::underlying_type<Enum>::type>(enumerator);
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1122
diff changeset
210 return index >= EnumLimits<Enum>::First and index <= EnumLimits<Enum>::Last;
1053
2a48c0fff107 Refactor primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1037
diff changeset
211 }
2a48c0fff107 Refactor primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1037
diff changeset
212
2a48c0fff107 Refactor primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1037
diff changeset
213 double getRadialPoint(int segment, int divisions, double(*func)(double));
2a48c0fff107 Refactor primitives
Teemu Piippo <teemu@hecknology.net>
parents: 1037
diff changeset
214 QVector<QLineF> makeCircle(int segments, int divisions, double radius);
1181
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
215 qreal distanceFromPointToRectangle(const QPointF& point, const QRectF& rectangle);
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
216
1122
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
217 /*
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
218 * Implements a ring adapter over T. This class corrects indices given to the element-operator so that they're within bounds.
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
219 * The maximum amount can be specified manually.
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
220 *
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
221 * Example:
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
222 *
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
223 * int A[] = {10,20,30,40};
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
224 * ring(A)[0] == A[0 % 4] == A[0]
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
225 * ring(A)[5] == A[5 % 4] == A[1]
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
226 * ring(A)[-1] == ring(A)[-1 + 4] == A[3]
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
227 */
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
228 template<typename T>
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
229 class RingAdapter
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
230 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
231 private:
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
232 // The private section must come first because _collection is used in decltype() below.
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
233 T& _collection;
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
234 const int _count;
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
235
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
236 public:
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
237 RingAdapter(T& collection, int count) :
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
238 _collection {collection},
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
239 _count {count} {}
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
240
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
241 template<typename IndexType>
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
242 decltype(_collection[IndexType()]) operator[](IndexType index)
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
243 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
244 if (_count == 0)
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
245 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
246 // Argh! ...let the collection deal with this case.
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
247 return _collection[0];
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
248 }
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
249 else
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
250 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
251 index %= _count;
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
252
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
253 // Fix negative modulus...
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
254 if (index < 0)
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
255 index += _count;
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
256
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
257 return _collection[index];
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
258 }
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
259 }
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
260
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
261 int size() const
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
262 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
263 return _count;
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
264 }
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
265 };
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
266
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
267 /*
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
268 * Convenience function for RingAdapter so that the template parameter does not have to be provided. The ring amount is assumed
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
269 * to be the amount of elements in the collection.
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
270 */
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
271 template<typename T>
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
272 RingAdapter<T> ring(T& collection)
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
273 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
274 return RingAdapter<T> {collection, countof(collection)};
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
275 }
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
276
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
277 /*
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
278 * Version of ring() that allows manual specification of the count.
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
279 */
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
280 template<typename T>
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
281 RingAdapter<T> ring(T& collection, int count)
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
282 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
283 return RingAdapter<T> {collection, count};
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
284 }
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
285
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
286 //
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
287 // Get the amount of elements in something.
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
288 //
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
289 template<typename T, size_t N>
1065
c8ecddbd99e9 Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents: 1064
diff changeset
290 int countof(T(&)[N])
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
291 {
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
292 return N;
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
293 }
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
294
1065
c8ecddbd99e9 Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents: 1064
diff changeset
295 static inline int countof(const QString& string)
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
296 {
1063
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
297 return string.length();
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
298 }
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
299
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
300 template<typename T>
1065
c8ecddbd99e9 Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents: 1064
diff changeset
301 int countof(const QVector<T>& vector)
1062
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
302 {
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
303 return vector.size();
4119185b56ca refactor: added the length() function that's like Python's len()
Teemu Piippo <teemu@hecknology.net>
parents: 1058
diff changeset
304 }
1063
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
305
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
306 template<typename T>
1065
c8ecddbd99e9 Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents: 1064
diff changeset
307 int countof(const QList<T>& vector)
1063
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
308 {
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
309 return vector.size();
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
310 }
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
311
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
312 template<typename T>
1073
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
313 int countof(const QSet<T>& set)
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
314 {
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
315 return set.size();
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
316 }
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
317
a0a0d581309b Major overhaul of object→document relationship: added the Model class which models the object buffer. Each object is to be included in a model (an invariant that currently does not hold). A document is a subclass of a model. The LDObject is also now agnostic about selection, and the selection is now a set. A lot of things are probably broken now but it's a major step forward.
Teemu Piippo <teemu@hecknology.net>
parents: 1072
diff changeset
318 template<typename T>
1065
c8ecddbd99e9 Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents: 1064
diff changeset
319 int countof(const std::initializer_list<T>& vector)
1063
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
320 {
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
321 return vector.size();
1f15c52c11f6 Replaced uses of 'x.size()' with 'length(x)'
Teemu Piippo <teemu@hecknology.net>
parents: 1062
diff changeset
322 }
1122
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
323
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
324 template<typename T>
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
325 int countof(const RingAdapter<T>& ring)
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
326 {
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
327 return ring.size();
795d1c3554b9 Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents: 1079
diff changeset
328 }
1178
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
329
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
330 /*
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
331 * Extracts the sign of x.
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
332 */
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
333 template<typename T>
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
334 T sign(T x)
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
335 {
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
336 if (isZero(x))
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
337 return {};
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
338 else
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
339 return x / qAbs(x);
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
340 }
1181
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
341
1273
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
342 template<>
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
343 inline int sign(int x)
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
344 {
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
345 if (x == 0)
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
346 return 0;
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
347 else
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
348 return x / qAbs(x);
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
349 }
900f1dfae46b Implemented row moving in the model and replaced swapping with it
Santeri Piippo
parents: 1181
diff changeset
350
1181
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
351 /*
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
352 * Returns the maximum of a single parameter (the parameter itself).
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
353 */
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
354 template <typename T>
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
355 T max(T a)
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
356 {
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
357 return a;
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
358 }
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
359
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
360 /*
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
361 * Returns the maximum of two parameters.
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
362 */
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
363 template <typename T>
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
364 T max(T a, T b)
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
365 {
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
366 return a > b ? a : b;
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
367 }
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
368
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
369 /*
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
370 * Returns the maximum of n parameters.
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
371 */
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
372 template <typename T, typename... Rest>
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
373 T max(T a, Rest&&... rest)
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
374 {
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
375 return max(a, max(rest...));
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
376 }
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
377
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
378 /*
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
379 * Returns the minimum of a single parameter (the parameter itself).
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
380 */
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
381 template <typename T>
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
382 T min(T a)
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
383 {
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
384 return a;
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
385 }
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
386
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
387 /*
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
388 * Returns the minimum of two parameters.
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
389 */
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
390 template <typename T>
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
391 T min(T a, T b)
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
392 {
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
393 return a < b ? a : b;
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
394 }
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
395
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
396 /*
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
397 * Returns the minimum of n parameters.
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
398 */
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
399 template <typename T, typename... Rest>
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
400 T min(T a, Rest&&... rest)
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
401 {
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
402 return min(a, min(rest...));
ca6d0ef9aadb Added polar grid rendering (which is disabled for now).
Teemu Piippo <teemu@hecknology.net>
parents: 1178
diff changeset
403 }
1291
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
404
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
405 /*
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
406 * Assigns the value of a single flag in a flagset
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
407 */
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
408 template<int Flag, typename T>
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
409 void assignFlag(QFlags<T>& flagset, bool value)
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
410 {
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
411 if (value)
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
412 flagset |= static_cast<T>(Flag);
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
413 else
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
414 flagset &= ~static_cast<T>(Flag);
9c570a30c98a Added basic header editing
Teemu Piippo <teemu@hecknology.net>
parents: 1273
diff changeset
415 }

mercurial