// $Id$
//
-// Copyright (C) 2009
+// Copyright (C) 2009
// Fraunhofer Institute for Open Communication Systems (FOKUS)
// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
// Custom includes
#include <sstream>
+#include <limits>
#include <boost/format.hpp>
+#include "Traits.hh"
#define prefix_
-///////////////////////////////ct.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// senf::console::ArgumentTraits< CharAsString<CharT> >
+
+template <class CharT>
+prefix_ void senf::console::ArgumentTraits< senf::console::CharAsString<CharT> >::
+parse(ParseCommandInfo::TokensRange const & tokens, CharAsString<CharT> & out)
+{
+ std::string v;
+ console::parse(tokens,v);
+ if (v.size() != 1)
+ throw SyntaxErrorException("Invalid size of character constant");
+ out.value = static_cast<CharT>(v[0]);
+}
+
+template <class CharT>
+prefix_ std::string
+senf::console::ArgumentTraits< senf::console::CharAsString<CharT> >::description()
+{
+ return std::numeric_limits<CharT>::is_signed ? "char" : "uchar";
+}
+
+template <class CharT>
+prefix_ std::string senf::console::ArgumentTraits< senf::console::CharAsString<CharT> >::
+str(CharAsString<CharT> value)
+{
+ return console::str(std::string(1,value.value));
+}
+
+template <class CharT>
+prefix_ void senf::console::ReturnValueTraits< senf::console::CharAsString<CharT> >::
+format(CharAsString<CharT> value, std::ostream & os)
+{
+ console::format(std::string(1,value.value),os);
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::console::ArgumentTraits< senf::console::ValueRange<T> >
template <class T>
parse(ParseCommandInfo::TokensRange const & tokens, type & out)
{
if (tokens.size() != 1)
- throw senf::console::SyntaxErrorException("parameter syntax error");
+ throw SyntaxErrorException("parameter syntax error");
std::string v (tokens.begin()[0].value());
std::string::size_type i (v.find(':'));
try {
}
}
catch (std::bad_cast & ex) {
- throw senf::console::SyntaxErrorException("parameter syntax error");
+ throw SyntaxErrorException("parameter syntax error");
}
}
return ss.str();
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::console::ReturnValueTraits< senf::console::ValueRange<T> >
template <class T>
os << ':' << senf::console::str(value.high);
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::console::ArgumentTraits< senf::console::FlagCollection<Enum> >
template <class Enum>
out.value = 0;
while (arg) {
Enum v;
- senf::console::parse( *(arg++), v);
+ console::parse( *(arg++), v);
out.value |= v;
}
}
senf::console::ArgumentTraits< senf::console::FlagCollection<Enum> >::str(type const & value)
{
std::stringstream ss;
- senf::console::format(value, ss);
+ console::format(value, ss);
return ss.str();
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::console::ReturnValueTraits< senf::console::FlagCollection<Enum> >
template <class Enum>
for (unsigned bit (0); bit<sizeof(value.value)*CHAR_BIT; ++bit, flag<<=1) {
if (value.value & flag) {
if (n++) ss << " ";
- senf::console::format(static_cast<Enum>(flag), ss);
+ console::format(static_cast<Enum>(flag), ss);
}
}
os << (n != 1 ? "(" + ss.str() + ")" : ss.str());
}
-///////////////////////////////ct.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
\f