Util.h
Go to the documentation of this file.
00001 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
00002 
00003 // -- BEGIN LICENSE BLOCK ----------------------------------------------
00004 // This file is part of FZIs ic_workspace.
00005 //
00006 // This program is free software licensed under the LGPL
00007 // (GNU LESSER GENERAL PUBLIC LICENSE Version 3).
00008 // You can find a copy of this license in LICENSE folder in the top
00009 // directory of the source code.
00010 //
00011 // © Copyright 2016 FZI Forschungszentrum Informatik, Karlsruhe, Germany
00012 //
00013 // -- END LICENSE BLOCK ------------------------------------------------
00014 
00015 //----------------------------------------------------------------------
00024 //----------------------------------------------------------------------
00025 #ifndef ICL_CORE_CONFIG_UTIL_H_INCLUDED
00026 #define ICL_CORE_CONFIG_UTIL_H_INCLUDED
00027 
00028 #include <iostream>
00029 #include <iomanip>
00030 #include <sstream>
00031 #include <stdexcept>
00032 #include <boost/algorithm/string.hpp>
00033 
00034 namespace icl_core {
00035 namespace config {
00037 namespace impl {
00038 
00042 template <typename T, typename U>
00043 T hexical_cast(U input)
00044 {
00045   std::stringstream interpreter;
00046   interpreter.setf(std::ios::fmtflags(), std::ios::basefield);
00047   interpreter << input;
00048   T result;
00049   interpreter >> result;
00050   return result;
00051 }
00052 
00059 template <typename U>
00060 bool bool_cast(U input)
00061 {
00062   std::stringstream interpreter;
00063   interpreter.setf(std::ios::fmtflags(), std::ios::basefield);
00064   interpreter << input;
00065   std::string result;
00066   interpreter >> result;
00067   boost::algorithm::to_lower(result);
00068   if (result == "1" || result == "yes" || result == "true")
00069   {
00070     return true;
00071   }
00072   else
00073   {
00074     return false;
00075   }
00076 }
00077 
00086 template <typename U>
00087 bool strict_bool_cast(U input)
00088 {
00089   std::stringstream interpreter;
00090   interpreter.setf(std::ios::fmtflags(), std::ios::basefield);
00091   interpreter << input;
00092   std::string result;
00093   interpreter >> result;
00094   boost::algorithm::to_lower(result);
00095   if (result == "1" || result == "yes" || result == "true")
00096   {
00097     return true;
00098   }
00099   else if (result == "0" || result == "no" || result == "false")
00100   {
00101     return false;
00102   }
00103   else
00104   {
00105     throw std::invalid_argument("Not a boolean value: " + result);
00106   }
00107 }
00108 
00109 }
00110 }
00111 }
00112 
00113 #endif


fzi_icl_core
Author(s):
autogenerated on Thu Jun 6 2019 20:22:24