tclap
1.2.0
Main Page
Namespaces
Classes
Files
File List
File Members
include
tclap
ValuesConstraint.h
Go to the documentation of this file.
1
2
3
/******************************************************************************
4
*
5
* file: ValuesConstraint.h
6
*
7
* Copyright (c) 2005, Michael E. Smoot
8
* All rights reverved.
9
*
10
* See the file COPYING in the top directory of this distribution for
11
* more information.
12
*
13
* THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS
14
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19
* DEALINGS IN THE SOFTWARE.
20
*
21
*****************************************************************************/
22
23
#ifndef TCLAP_VALUESCONSTRAINT_H
24
#define TCLAP_VALUESCONSTRAINT_H
25
26
#include <string>
27
#include <vector>
28
#include <
tclap/Constraint.h
>
29
30
#ifdef HAVE_CONFIG_H
31
#include <config.h>
32
#else
33
#define HAVE_SSTREAM
34
#endif
35
36
#if defined(HAVE_SSTREAM)
37
#include <sstream>
38
#elif defined(HAVE_STRSTREAM)
39
#include <strstream>
40
#else
41
#error "Need a stringstream (sstream or strstream) to compile!"
42
#endif
43
44
namespace
TCLAP {
45
50
template
<
class
T>
51
class
ValuesConstraint
:
public
Constraint
<T>
52
{
53
54
public
:
55
60
ValuesConstraint
(std::vector<T>& allowed);
61
65
virtual
~ValuesConstraint
() {}
66
70
virtual
std::string
description
()
const
;
71
75
virtual
std::string
shortID
()
const
;
76
82
virtual
bool
check
(
const
T& value)
const
;
83
84
protected
:
85
89
std::vector<T>
_allowed
;
90
94
std::string
_typeDesc
;
95
96
};
97
98
template
<
class
T>
99
ValuesConstraint<T>::ValuesConstraint
(std::vector<T>& allowed)
100
: _allowed(allowed)
101
{
102
for
(
unsigned
int
i = 0; i <
_allowed
.size(); i++ )
103
{
104
105
#if defined(HAVE_SSTREAM)
106
std::ostringstream os;
107
#elif defined(HAVE_STRSTREAM)
108
std::ostrstream os;
109
#else
110
#error "Need a stringstream (sstream or strstream) to compile!"
111
#endif
112
113
os <<
_allowed
[i];
114
115
std::string temp( os.str() );
116
117
if
( i > 0 )
118
_typeDesc
+=
"|"
;
119
_typeDesc
+= temp;
120
}
121
}
122
123
template
<
class
T>
124
bool
ValuesConstraint<T>::check
(
const
T& val )
const
125
{
126
if
( std::find(_allowed.begin(),_allowed.end(),val) == _allowed.end() )
127
return
false
;
128
else
129
return
true
;
130
}
131
132
template
<
class
T>
133
std::string
ValuesConstraint<T>::shortID
()
const
134
{
135
return
_typeDesc;
136
}
137
138
template
<
class
T>
139
std::string
ValuesConstraint<T>::description
()
const
140
{
141
return
_typeDesc;
142
}
143
144
145
}
//namespace TCLAP
146
#endif
147
Generated by
1.8.1.1