Library of Assembled Shared Sources
parameter_policy.h
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2023 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43
44
45/** @defgroup ParameterPolicy ParameterPolicy
46 * @brief policies to specify the rules for parameters without an inifite range.
47 * @author Bram de Greve
48 * @date 2003
49 *
50 * Of some primitives that can use a parameter to locate a point on its surface (like
51 * Line3D, Plane3D, ...), some will not have points for all possible values of the
52 * parameter (like Ray3D, LineSegment3D, ...). For a Ray3D, only the parameters t >= 0
53 * are valid. For LineSegment3D, only 0 <= t <= 1 is valid.
54 */
55
56
57
58
59
60#ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_PARAMETER_POLICY_H
61#define LASS_GUARDIAN_OF_INCLUSION_PRIM_PARAMETER_POLICY_H
62
63#include "prim_common.h"
64#include "../util/enforcer.h"
65
66
67
68namespace lass
69{
70
71namespace prim
72{
73
74/** @ingroup ParameterPolicy
75 */
76class ParameterError: public util::ExceptionMixin<ParameterError>
77{
78public:
79 ParameterError(std::string msg, std::string loc): util::ExceptionMixin<ParameterError>(std::move(msg), std::move(loc)) {}
80 ~ParameterError() noexcept {}
81};
82
83
84
85/** @ingroup ParameterPolicy
86 * @brief Parameters supplied to functions must be in the range of the primitive.
87 * @author Bram de Greve [BdG]
88 * @date 2003
89 *
90 * An example: of a ray (origin + t * direction), only values t >= 0 are points of the ray.
91 * Here all parameters t supplied to functions of the ray must be positive. If not,
92 * an exception is thrown.
93 */
94struct Bounded
95{
96 template <class T>
97 static void enforceRange(const T& iT, const T& iMin, const T& iMax)
98 {
99 if (!(iT >= iMin && iT <= iMax))
100 {
101 LASS_THROW_EX(ParameterError, "parameter '" << iT << "' outside valid range ["
102 << iMin << ", " << iMax << "].");
103 }
104 }
105
106 template <class T>
107 static void enforceRange(const T& iT, const T& iMin)
108 {
109 if (!(iT >= iMin))
110 {
111 LASS_THROW_EX(ParameterError, "parameter '" << iT << "' outside valid range ["
112 << iMin << ", +inf].");
113 }
114 }
115};
116
117
118
119/** @ingroup ParameterPolicy
120 * @brief Parameters supplied to functions can go out of the range of the primitive.
121 * @author Bram de Greve [BdG]
122 * @date 2003
123 *
124 * An example: of a ray (origin + t * direction), only values t >= 0 are points of the ray.
125 * Here also negative values for t will be accepted by functions of the ray, as long as
126 * no other conditions are broken. However, it is no longer garanteed that results make sense.
127 * i.e. with this policy, Ray3D<>::point will also return a point for t < 0, but it won't be
128 * a point of the ray. Though, it can be a usefull policy if we need to be able to get
129 * points beyond the origin of the ray.
130 */
132{
133 template <typename T>
134 static void enforceRange(const T& /*iT*/, const T& /*iMin*/, const T& /*iMax*/)
135 {
136 }
137
138 template <typename T>
139 static void enforceRange(const T& /*iT*/, const T& /*iMin*/)
140 {
141 }
142};
143
144}
145
146}
147
148#endif
149
150// EOF
set of geometrical primitives
Definition aabb_2d.h:81
Library for Assembled Shared Sources.
Definition config.h:53
Parameters supplied to functions must be in the range of the primitive.
Parameters supplied to functions can go out of the range of the primitive.