00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_TCL_ARGSPEC_H_UTC20050628064704_DEFINED
00035 #define GROOVX_TCL_ARGSPEC_H_UTC20050628064704_DEFINED
00036
00037 #include <limits>
00038
00039 namespace tcl
00040 {
00042
00049 class arg_spec
00050 {
00051 public:
00052 arg_spec()
00053 :
00054 m_argc_min(0),
00055 m_argc_max(0),
00056 m_is_exact(false)
00057 {}
00058
00060
00062 explicit arg_spec(int nmin, int nmax = -1, bool ex = false)
00063 :
00064 m_argc_min(nmin < 0
00065 ? 0
00066 : static_cast<unsigned int>(nmin)),
00067 m_argc_max(nmax == -1
00068 ? m_argc_min
00069 : static_cast<unsigned int>(nmax)),
00070 m_is_exact(ex)
00071 {}
00072
00073 arg_spec& min(int nmin) { m_argc_min = nmin; return *this; }
00074 arg_spec& max(int nmax) { m_argc_max = nmax; return *this; }
00075 arg_spec& exact(bool ex) { m_is_exact = ex; return *this; }
00076
00077 arg_spec& nolimit()
00078 {
00079 m_argc_max = std::numeric_limits<unsigned int>::max();
00080 m_is_exact = false;
00081 return *this;
00082 }
00083
00084 bool allows_argc(unsigned int objc) const
00085 {
00086 if (this->m_is_exact)
00087 {
00088 return (objc == this->m_argc_min ||
00089 objc == this->m_argc_max);
00090 }
00091
00092 return (objc >= this->m_argc_min &&
00093 objc <= this->m_argc_max);
00094 }
00095
00096 unsigned int argc_min() const { return m_argc_min; }
00097 unsigned int argc_max() const { return m_argc_max; }
00098 bool is_exact() const { return m_is_exact; }
00099
00100 private:
00101 unsigned int m_argc_min;
00102 unsigned int m_argc_max;
00103 bool m_is_exact;
00104 };
00105 }
00106
00107 static const char __attribute__((used)) vcid_groovx_tcl_argspec_h_utc20050628064704[] = "$Id: argspec.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00108 #endif // !GROOVX_TCL_ARGSPEC_H_UTC20050628064704DEFINED