Skip to content
Snippets Groups Projects
enum_parser.cc 553 B
Newer Older
Elias Pipping's avatar
Elias Pipping committed
// Copyright Carsten Graeser 2012

#include <dune/common/exceptions.hh>
#include <dune/common/typetraits.hh>

template <class Enum> struct StringToEnum : public Dune::NotImplemented {};
template <class Enum>
Elias Pipping's avatar
Elias Pipping committed
typename Dune::enable_if<
    !Dune::IsBaseOf<Dune::NotImplemented, StringToEnum<Enum>>::value,
Elias Pipping's avatar
Elias Pipping committed
    std::istream &>::type
operator>>(std::istream &lhs, Enum &e) {
Elias Pipping's avatar
Elias Pipping committed
  std::string s;
  lhs >> s;

  try {
    e = StringToEnum<Enum>::convert(s);
Elias Pipping's avatar
Elias Pipping committed
  }
  catch (typename Dune::Exception) {
    lhs.setstate(std::ios_base::failbit);
  }
  return lhs;
}