Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/3rdparty/openexr/Imath/ImathInterval.h
16337 views
1
///////////////////////////////////////////////////////////////////////////
2
//
3
// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
4
// Digital Ltd. LLC
5
//
6
// All rights reserved.
7
//
8
// Redistribution and use in source and binary forms, with or without
9
// modification, are permitted provided that the following conditions are
10
// met:
11
// * Redistributions of source code must retain the above copyright
12
// notice, this list of conditions and the following disclaimer.
13
// * Redistributions in binary form must reproduce the above
14
// copyright notice, this list of conditions and the following disclaimer
15
// in the documentation and/or other materials provided with the
16
// distribution.
17
// * Neither the name of Industrial Light & Magic nor the names of
18
// its contributors may be used to endorse or promote products derived
19
// from this software without specific prior written permission.
20
//
21
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
//
33
///////////////////////////////////////////////////////////////////////////
34
35
36
37
#ifndef INCLUDED_IMATHINTERVAL_H
38
#define INCLUDED_IMATHINTERVAL_H
39
40
41
//-------------------------------------------------------------------
42
//
43
// class Imath::Interval<class T>
44
// --------------------------------
45
//
46
// An Interval has a min and a max and some miscellaneous
47
// functions. It is basically a Box<T> that allows T to be
48
// a scalar.
49
//
50
//-------------------------------------------------------------------
51
52
#include "ImathVec.h"
53
54
namespace Imath {
55
56
57
template <class T>
58
class Interval
59
{
60
public:
61
62
//-------------------------
63
// Data Members are public
64
//-------------------------
65
66
T min;
67
T max;
68
69
//-----------------------------------------------------
70
// Constructors - an "empty" Interval is created by default
71
//-----------------------------------------------------
72
73
Interval();
74
Interval(const T& point);
75
Interval(const T& minT, const T& maxT);
76
77
//--------------------------------
78
// Operators: we get != from STL
79
//--------------------------------
80
81
bool operator == (const Interval<T> &src) const;
82
83
//------------------
84
// Interval manipulation
85
//------------------
86
87
void makeEmpty();
88
void extendBy(const T& point);
89
void extendBy(const Interval<T>& interval);
90
91
//---------------------------------------------------
92
// Query functions - these compute results each time
93
//---------------------------------------------------
94
95
T size() const;
96
T center() const;
97
bool intersects(const T &point) const;
98
bool intersects(const Interval<T> &interval) const;
99
100
//----------------
101
// Classification
102
//----------------
103
104
bool hasVolume() const;
105
bool isEmpty() const;
106
};
107
108
109
//--------------------
110
// Convenient typedefs
111
//--------------------
112
113
114
typedef Interval <float> Intervalf;
115
typedef Interval <double> Intervald;
116
typedef Interval <short> Intervals;
117
typedef Interval <int> Intervali;
118
119
//----------------
120
// Implementation
121
//----------------
122
123
124
template <class T>
125
inline Interval<T>::Interval()
126
{
127
makeEmpty();
128
}
129
130
template <class T>
131
inline Interval<T>::Interval(const T& point)
132
{
133
min = point;
134
max = point;
135
}
136
137
template <class T>
138
inline Interval<T>::Interval(const T& minV, const T& maxV)
139
{
140
min = minV;
141
max = maxV;
142
}
143
144
template <class T>
145
inline bool
146
Interval<T>::operator == (const Interval<T> &src) const
147
{
148
return (min == src.min && max == src.max);
149
}
150
151
template <class T>
152
inline void
153
Interval<T>::makeEmpty()
154
{
155
min = limits<T>::max();
156
max = limits<T>::min();
157
}
158
159
template <class T>
160
inline void
161
Interval<T>::extendBy(const T& point)
162
{
163
if ( point < min )
164
min = point;
165
166
if ( point > max )
167
max = point;
168
}
169
170
template <class T>
171
inline void
172
Interval<T>::extendBy(const Interval<T>& interval)
173
{
174
if ( interval.min < min )
175
min = interval.min;
176
177
if ( interval.max > max )
178
max = interval.max;
179
}
180
181
template <class T>
182
inline bool
183
Interval<T>::intersects(const T& point) const
184
{
185
return point >= min && point <= max;
186
}
187
188
template <class T>
189
inline bool
190
Interval<T>::intersects(const Interval<T>& interval) const
191
{
192
return interval.max >= min && interval.min <= max;
193
}
194
195
template <class T>
196
inline T
197
Interval<T>::size() const
198
{
199
return max-min;
200
}
201
202
template <class T>
203
inline T
204
Interval<T>::center() const
205
{
206
return (max+min)/2;
207
}
208
209
template <class T>
210
inline bool
211
Interval<T>::isEmpty() const
212
{
213
return max < min;
214
}
215
216
template <class T>
217
inline bool Interval<T>::hasVolume() const
218
{
219
return max > min;
220
}
221
222
} // namespace Imath
223
224
#endif
225
226