pelib
2.0.0
|
00001 /* 00002 Copyright 2015 Nicolas Melot 00003 00004 This file is part of Pelib. 00005 00006 Pelib is free software: you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation, either version 3 of the License, or 00009 (at your option) any later version. 00010 00011 Pelib is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with Pelib. If not, see <http://www.gnu.org/licenses/>. 00018 */ 00019 00020 00021 #include <boost/lexical_cast.hpp> 00022 #include <boost/algorithm/string.hpp> 00023 #include <pelib/DeadlineCalculator.hpp> 00024 #include <pelib/DeadlineConstant.hpp> 00025 #include <pelib/DeadlineFormula.hpp> 00026 #include <pelib/ParseException.hpp> 00027 00028 using namespace boost::algorithm; 00029 00030 namespace pelib 00031 { 00032 DeadlineCalculator* 00033 DeadlineCalculator::getDeadlineCalculator(const std::string str) 00034 { 00035 string key(str); 00036 trim(key); 00037 00038 try{ 00039 if(key.find("exprtk") == 0) 00040 { 00041 return new DeadlineFormula(key.substr(string("exprtk").size() + 1)); 00042 } 00043 else 00044 { 00045 //Maybe it is just a number, already calculated. Fine 00046 return new DeadlineConstant(boost::lexical_cast<float>(key)); 00047 } 00048 } 00049 catch(const boost::bad_lexical_cast &) 00050 { 00051 throw ParseException("Deadline type not recognized: " + key); 00052 } 00053 } 00054 }