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 <pelib/RawData.hpp> 00022 #include <pelib/DataParser.hpp> 00023 #include <pelib/Scalar.hpp> 00024 #include <pelib/CastException.hpp> 00025 #include <pelib/ParseException.hpp> 00026 #include <pelib/NoDecimalFloatException.hpp> 00027 00028 #ifndef PELIB_RAWSCALAR 00029 #define PELIB_RAWSCALAR 00030 00031 namespace pelib 00032 { 00034 template <class Value> 00035 class 00036 RawScalar: public RawData 00037 { 00038 public: 00040 virtual 00041 RawScalar* 00042 clone() const 00043 { 00044 return new RawScalar(); 00045 } 00046 00048 virtual 00049 void 00050 dump(std::ostream &stream, const AlgebraData *data) const 00051 { 00052 const Scalar<Value> *scalar = dynamic_cast<const Scalar<Value>* >(data); 00053 if(scalar == NULL) throw CastException("parameter \"data\" was not of type \"Scalar<Value>\"."); 00054 00055 Value val = scalar->getValue(); 00056 if(scalar->getPrecision() == AlgebraData::higher) 00057 { 00058 val = AlgebraData::fixPrecision(val, stream.precision()); 00059 } 00060 00061 stream << val << std::endl; 00062 } 00063 00064 protected: 00065 private: 00066 }; 00067 } 00068 00069 #endif