hpp-constraints 6.0.0
Definition of basic geometric constraints for motion planning
Loading...
Searching...
No Matches
comparison-types.hh
Go to the documentation of this file.
1// Copyright (c) 2020 CNRS, Airbus SAS
2// Author: Florent Lamiraux
3// Authors: Joseph Mirabel (joseph.mirabel@laas.fr), Florent Lamiraux
4//
5
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10// 1. Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12//
13// 2. Redistributions in binary form must reproduce the above copyright
14// notice, this list of conditions and the following disclaimer in the
15// documentation and/or other materials provided with the distribution.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
28// DAMAGE.
29
30#ifndef HPP_CONSTRAINTS_COMOARISON_TYPES_HH
31#define HPP_CONSTRAINTS_COMOARISON_TYPES_HH
32
34#include <iostream>
35#include <vector>
36
37namespace hpp {
38namespace constraints {
39namespace internal {
41struct ReplicateCompType {
42 ComparisonType type;
43 std::size_t n;
44
45 void push_to(ComparisonTypes_t& v) const {
46 for (std::size_t i = 0; i < n; ++i) v.push_back(type);
47 }
48 // Cast to ComparisonTypes_t
49 operator ComparisonTypes_t() const { return ComparisonTypes_t(n, type); }
50}; // struct ReplicateCompType
52} // namespace internal
53inline internal::ReplicateCompType operator*(const int& n,
54 const ComparisonType& c) {
55 internal::ReplicateCompType cts;
56 cts.type = c;
57 cts.n = (std::size_t)n;
58 return cts;
59}
60
62 const ComparisonType& b) {
64 v[0] = a;
65 v[1] = b;
66 return v;
67}
68
69inline ComparisonTypes_t operator<<(const internal::ReplicateCompType& a,
70 const ComparisonType& b) {
72 v.reserve(a.n + 1);
73 a.push_to(v);
74 v.push_back(b);
75 return v;
76}
77
79 const internal::ReplicateCompType& b) {
81 v.reserve(b.n + 1);
82 v.push_back(a);
83 b.push_to(v);
84 return v;
85}
86
88 const ComparisonType& c) {
89 v.push_back(c);
90 return v;
91}
92
94 const internal::ReplicateCompType& c) {
95 for (std::size_t i = 0; i < c.n; ++i) v.push_back(c.type);
96 return v;
97}
98
100 const ComparisonType& c) {
102 vv.reserve(v.size() + 1);
103 vv.insert(vv.end(), v.begin(), v.end());
104 vv.push_back(c);
105 return vv;
106}
107
109 const internal::ReplicateCompType& c) {
111 vv.reserve(v.size() + c.n);
112 vv.insert(vv.end(), v.begin(), v.end());
113 for (std::size_t i = 0; i < c.n; ++i) vv.push_back(c.type);
114 return vv;
115}
116
117inline bool operator==(const ComparisonTypes_t& v,
118 const internal::ReplicateCompType& r) {
119 if (v.size() != r.n) return false;
120 for (std::size_t i = 0; i < v.size(); ++i) {
121 if (v[i] != r.type) return false;
122 }
123 return true;
124}
125
126inline std::ostream& operator<<(std::ostream& os,
127 const ComparisonTypes_t& comp) {
128 os << "(";
129 for (ComparisonTypes_t::const_iterator it = comp.begin(); it != comp.end();
130 ++it) {
131 if (*it == Equality) {
132 os << "Equality";
133 } else if (*it == EqualToZero) {
134 os << "EqualToZero";
135 } else if (*it == Superior) {
136 os << "Superior";
137 } else if (*it == Inferior) {
138 os << "Inferior";
139 } else {
140 assert("false && ComparisonType out of range.");
141 }
142 if (it + 1 != comp.end()) os << ", ";
143 }
144 os << ")";
145 return os;
146}
147} // namespace constraints
148} // namespace hpp
149
151 hpp::constraints::internal::ReplicateCompType c1,
152 hpp::constraints::internal::ReplicateCompType c2) {
154 for (std::size_t i = 0; i < c2.n; ++i) vv.push_back(c2.type);
155 return vv;
156}
157
158#endif // HPP_CONSTRAINTS_COMOARISON_TYPES_HH
hpp::constraints::ComparisonTypes_t operator<<(hpp::constraints::internal::ReplicateCompType c1, hpp::constraints::internal::ReplicateCompType c2)
Definition comparison-types.hh:150
std::vector< ComparisonType > ComparisonTypes_t
Definition fwd.hh:180
ComparisonTypes_t operator<<(const ComparisonType &a, const ComparisonType &b)
Definition comparison-types.hh:61
bool operator==(const ComparisonTypes_t &v, const internal::ReplicateCompType &r)
Definition comparison-types.hh:117
internal::ReplicateCompType operator*(const int &n, const ComparisonType &c)
Definition comparison-types.hh:53
ComparisonType
Definition fwd.hh:179
@ Inferior
Definition fwd.hh:179
@ Superior
Definition fwd.hh:179
@ EqualToZero
Definition fwd.hh:179
@ Equality
Definition fwd.hh:179
Definition active-set-differentiable-function.hh:36