From 1c2370e908bb657c9a6f59251daa02dee35ae017 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 22 Aug 2016 10:23:53 +0200 Subject: [PATCH] reinvent to_string and from_string --- aconvert2/src/DotConverter.cpp | 4 +-- aconvert2/src/TikZConverter.cpp | 4 +-- alib2common/src/XmlApi.hpp | 4 +-- .../src/graph/common/GraphFromXMLParser.cpp | 2 +- .../src/graph/common/GraphToXMLComposer.h | 4 +-- alib2data/src/label/HexavigesimalLabel.cpp | 4 +-- alib2data/src/primitive/Integer.cpp | 4 +-- alib2data/src/primitive/Unsigned.cpp | 4 +-- ...MeasurementProvisionerConfigurationXml.cpp | 6 ++-- .../MeasurementProvisionerResultsXml.cpp | 4 +-- alib2std/src/extensions/string.cpp | 28 +++++++++---------- alib2std/src/extensions/string.hpp | 16 +++++++++-- alib2std/src/string | 13 +++++++++ alib2std/test-src/extensions/StringTest.cpp | 22 +++++++++++++++ alib2std/test-src/extensions/StringTest.h | 26 +++++++++++++++++ alib2str/src/graph/GraphFromStringParser.cpp | 2 +- .../primitive/PrimitiveFromStringParser.cpp | 2 +- alib2str/src/tree/TreeFromStringParser.cpp | 4 +-- alib2str/src/tree/TreeToStringComposer.cpp | 4 +-- 19 files changed, 113 insertions(+), 44 deletions(-) create mode 100644 alib2std/test-src/extensions/StringTest.cpp create mode 100644 alib2std/test-src/extensions/StringTest.h diff --git a/aconvert2/src/DotConverter.cpp b/aconvert2/src/DotConverter.cpp index 8a93361ee7..22c3fed901 100644 --- a/aconvert2/src/DotConverter.cpp +++ b/aconvert2/src/DotConverter.cpp @@ -888,7 +888,7 @@ void DotConverter::transitions(const automaton::NFTA& fta, const std::map<label: //put transitions from automaton to "transitions" for (const auto& transition : fta.getTransitions()) { std::string symbol = alib::StringDataFactory::toString(transition.first.first.getSymbol()); - symbol += std::utos(transition.first.first.getRank().getData()); + symbol += std::to_string(transition.first.first.getRank().getData()); for(const label::Label& to : transition.second) { std::pair<int, std::vector<int>> key(states.find(to)->second, {}); @@ -939,7 +939,7 @@ void DotConverter::transitions(const automaton::DFTA& fta, const std::map<label: //put transitions from automaton to "transitions" for (const auto& transition : fta.getTransitions()) { std::string symbol = alib::StringDataFactory::toString(transition.first.first.getSymbol()); - symbol += std::utos(transition.first.first.getRank().getData()); + symbol += std::to_string(transition.first.first.getRank().getData()); std::pair<int, std::vector<int>> key(states.find(transition.second)->second, {}); for(const label::Label& state : transition.first.second) { diff --git a/aconvert2/src/TikZConverter.cpp b/aconvert2/src/TikZConverter.cpp index f31c3a1bd0..d2763873c3 100644 --- a/aconvert2/src/TikZConverter.cpp +++ b/aconvert2/src/TikZConverter.cpp @@ -857,7 +857,7 @@ void TikZConverter::transitions ( const automaton::NFTA & fta, const std::map < // put transitions from automaton to "transitions" for ( const auto & transition : fta.getTransitions ( ) ) { std::string symbol = alib::StringDataFactory::toString ( transition.first.first.getSymbol ( ) ); - symbol += std::utos ( transition.first.first.getRank ( ).getData ( ) ); + symbol += std::to_string ( transition.first.first.getRank ( ).getData ( ) ); for ( const label::Label & to : transition.second ) { std::pair < int, std::vector < int > > key ( states.find ( to )->second, { } ); @@ -922,7 +922,7 @@ void TikZConverter::transitions ( const automaton::DFTA & fta, const std::map < // put transitions from automaton to "transitions" for ( const auto & transition : fta.getTransitions ( ) ) { std::string symbol = alib::StringDataFactory::toString ( transition.first.first.getSymbol ( ) ); - symbol += std::utos ( transition.first.first.getRank ( ).getData ( ) ); + symbol += std::to_string ( transition.first.first.getRank ( ).getData ( ) ); std::pair < int, std::vector < int > > key ( states.find ( transition.second )->second, { } ); diff --git a/alib2common/src/XmlApi.hpp b/alib2common/src/XmlApi.hpp index 83f5950a85..28a866c004 100644 --- a/alib2common/src/XmlApi.hpp +++ b/alib2common/src/XmlApi.hpp @@ -130,7 +130,7 @@ public: if ( tagName == Group::getXmlTagRefName() ) { sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, Group::getXmlTagRefName() ); sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ATTRIBUTE, "id" ); - int id = std::stoi ( sax::FromXMLParserHelper::popTokenData ( input, sax::Token::TokenType::CHARACTER ) ); + int id = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( input, sax::Token::TokenType::CHARACTER ) ); sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ATTRIBUTE, "id" ); sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, Group::getXmlTagRefName() ); std::map < int, void * >::iterator elem = input.idToInstance ( Group::getXmlTagRefName() ).find ( id ); @@ -172,7 +172,7 @@ public: } else { output.emplace_back ( Group::getXmlTagRefName(), sax::Token::TokenType::START_ELEMENT ); output.emplace_back ( "id", sax::Token::TokenType::START_ATTRIBUTE ); - output.emplace_back ( std::itos ( elem->second ), sax::Token::TokenType::CHARACTER ); + output.emplace_back ( std::to_string ( elem->second ), sax::Token::TokenType::CHARACTER ); output.emplace_back ( "id", sax::Token::TokenType::END_ATTRIBUTE ); output.emplace_back ( Group::getXmlTagRefName(), sax::Token::TokenType::END_ELEMENT ); } diff --git a/alib2data/src/graph/common/GraphFromXMLParser.cpp b/alib2data/src/graph/common/GraphFromXMLParser.cpp index eb0ffe999e..83e5b38a7a 100644 --- a/alib2data/src/graph/common/GraphFromXMLParser.cpp +++ b/alib2data/src/graph/common/GraphFromXMLParser.cpp @@ -69,7 +69,7 @@ UndirectedEdge GraphFromXMLParser::parseUndirectedEdge(std::deque<sax::Token>::i int GraphFromXMLParser::parseValue(std::deque<sax::Token>::iterator& input) { sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, "value"); - int value = std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); + int value = std::from_string < int > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, "value"); return value; diff --git a/alib2data/src/graph/common/GraphToXMLComposer.h b/alib2data/src/graph/common/GraphToXMLComposer.h index 1de2a37aab..c55bc1d643 100644 --- a/alib2data/src/graph/common/GraphToXMLComposer.h +++ b/alib2data/src/graph/common/GraphToXMLComposer.h @@ -51,7 +51,7 @@ void GraphToXMLComposer::composeNodeValues(std::deque<sax::Token> &out, const T for (auto i : graph.nodeValues) { composeNode(out, i.first); out.emplace_back("value", sax::Token::TokenType::START_ELEMENT); - out.emplace_back(std::itos(i.second), sax::Token::TokenType::CHARACTER); + out.emplace_back(std::to_string(i.second), sax::Token::TokenType::CHARACTER); out.emplace_back("value", sax::Token::TokenType::END_ELEMENT); } out.emplace_back("nodevalues", sax::Token::TokenType::END_ELEMENT); @@ -63,7 +63,7 @@ void GraphToXMLComposer::composeEdgeValues(std::deque<sax::Token> &out, const T for (auto &i : graph.edgeValues) { composeEdge(out, i.first); out.emplace_back("value", sax::Token::TokenType::START_ELEMENT); - out.emplace_back(std::itos(i.second), sax::Token::TokenType::CHARACTER); + out.emplace_back(std::to_string(i.second), sax::Token::TokenType::CHARACTER); out.emplace_back("value", sax::Token::TokenType::END_ELEMENT); } out.emplace_back("edgevalues", sax::Token::TokenType::END_ELEMENT); diff --git a/alib2data/src/label/HexavigesimalLabel.cpp b/alib2data/src/label/HexavigesimalLabel.cpp index ce6e0c7626..bddec7ee68 100644 --- a/alib2data/src/label/HexavigesimalLabel.cpp +++ b/alib2data/src/label/HexavigesimalLabel.cpp @@ -47,14 +47,14 @@ HexavigesimalLabel::operator std::string() const { HexavigesimalLabel HexavigesimalLabel::parse(std::deque<sax::Token>::iterator& input) { sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, HexavigesimalLabel::getXmlTagName()); - HexavigesimalLabel data(std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER))); + HexavigesimalLabel data(std::from_string < int > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER))); sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, HexavigesimalLabel::getXmlTagName()); return data; } void HexavigesimalLabel::compose(std::deque<sax::Token>& out) const { out.emplace_back(HexavigesimalLabel::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); - out.emplace_back(std::itos(hexavigesimal), sax::Token::TokenType::CHARACTER); + out.emplace_back(std::to_string(hexavigesimal), sax::Token::TokenType::CHARACTER); out.emplace_back(HexavigesimalLabel::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } diff --git a/alib2data/src/primitive/Integer.cpp b/alib2data/src/primitive/Integer.cpp index 323d30d8b3..6a8975c07f 100644 --- a/alib2data/src/primitive/Integer.cpp +++ b/alib2data/src/primitive/Integer.cpp @@ -50,7 +50,7 @@ Integer Integer::parse(std::deque<sax::Token>::iterator& input) { int Integer::parseRaw(std::deque<sax::Token>::iterator& input) { sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, Integer::getXmlTagName()); - int data = std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); + int data = std::from_string < int > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, Integer::getXmlTagName()); return data; } @@ -61,7 +61,7 @@ void Integer::compose(std::deque<sax::Token>& out) const { void Integer::compose(std::deque<sax::Token>& out, int primitive) { out.emplace_back(Integer::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); - out.emplace_back(std::itos(primitive), sax::Token::TokenType::CHARACTER); + out.emplace_back(std::to_string(primitive), sax::Token::TokenType::CHARACTER); out.emplace_back(Integer::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } diff --git a/alib2data/src/primitive/Unsigned.cpp b/alib2data/src/primitive/Unsigned.cpp index a37f774505..1b1b8eb209 100644 --- a/alib2data/src/primitive/Unsigned.cpp +++ b/alib2data/src/primitive/Unsigned.cpp @@ -50,7 +50,7 @@ Unsigned Unsigned::parse(std::deque<sax::Token>::iterator& input) { unsigned Unsigned::parseRaw(std::deque<sax::Token>::iterator& input) { sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, Unsigned::getXmlTagName()); - unsigned data = std::stoi(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); + unsigned data = std::from_string < unsigned > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, Unsigned::getXmlTagName()); return data; } @@ -61,7 +61,7 @@ void Unsigned::compose(std::deque<sax::Token>& out) const { void Unsigned::compose(std::deque<sax::Token>& out, unsigned primitive) { out.emplace_back(Unsigned::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); - out.emplace_back(std::itos(primitive), sax::Token::TokenType::CHARACTER); + out.emplace_back(std::to_string(primitive), sax::Token::TokenType::CHARACTER); out.emplace_back(Unsigned::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); } diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp index 044d3531a0..9979ac7d81 100644 --- a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp +++ b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp @@ -60,7 +60,7 @@ void MeasurementProvisionerConfigurationXml::parseEnvironment ( MeasurementProvi sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ELEMENT, WORKING_DIRECTORY_TAG ); } else if ( data == PIPELINE_ITERATIONS_TAG ) { sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ELEMENT, PIPELINE_ITERATIONS_TAG ); - mpc.environment.pipelineIterations = std::stoi ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) ); + mpc.environment.pipelineIterations = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) ); sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ELEMENT, PIPELINE_ITERATIONS_TAG ); } else { break; @@ -152,10 +152,10 @@ MPCInputDatum MeasurementProvisionerConfigurationXml::parseInputDatum ( const st sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ATTRIBUTE, attrName ); if ( attrName == INPUT_DATA_ATTR_ID_NAME ) { - mpcid.id = std::stoi ( attrVal ); + mpcid.id = std::from_string < int > ( attrVal ); foundId = true; } else if ( attrName == INPUT_DATA_ATTR_COUNT_NAME ) { - mpcid.count = std::stoi ( attrVal ); + mpcid.count = std::from_string < int > ( attrVal ); } else if ( attrName == INPUT_DATA_ATTR_ALIAS_NAME ) { mpcid.alias = std::move ( attrVal ); } else { diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp b/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp index 1b6be258ae..688e5aad12 100644 --- a/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp +++ b/alib2measurepp/src/provisioner/MeasurementProvisionerResultsXml.cpp @@ -166,7 +166,7 @@ void MeasurementProvisionerResultsXml::parseInputs ( MPRInputResult & mprir, std sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ATTRIBUTE, idAttr ); - int id = stoi ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) ); + int id = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) ); sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ATTRIBUTE, idAttr ); @@ -229,7 +229,7 @@ void MeasurementProvisionerResultsXml::parsePipelineStatus ( MPRPipelineResult & if ( data == EXIT_CODE_TAG ) { sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ELEMENT, EXIT_CODE_TAG ); - mprpr.pipelineStatus.exitCode = stoi ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) ); + mprpr.pipelineStatus.exitCode = std::from_string < int > ( sax::FromXMLParserHelper::popTokenData ( iter, sax::Token::TokenType::CHARACTER ) ); sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::END_ELEMENT, EXIT_CODE_TAG ); } else if ( data == ERROR_ORIGIN_TAG ) { sax::FromXMLParserHelper::popToken ( iter, sax::Token::TokenType::START_ELEMENT, ERROR_ORIGIN_TAG ); diff --git a/alib2std/src/extensions/string.cpp b/alib2std/src/extensions/string.cpp index 0301978eb8..933e146cda 100644 --- a/alib2std/src/extensions/string.cpp +++ b/alib2std/src/extensions/string.cpp @@ -11,26 +11,24 @@ namespace std { -string itos ( int integer, int ) { - stringstream ss; - - ss << integer; - return ss.str ( ); +template < > +string to_string ( const string & value ) { + return value; } -unsigned stou ( const std::string & string, int ) { - stringstream ss ( string ); - unsigned integer; - - ss >> integer; - return integer; +template < > +string from_string ( const string & value ) { + return value; } -string utos ( unsigned integer, int ) { - stringstream ss; +template < > +int from_string ( const string & value ) { + return stoi__private ( value.c_str() ); +} - ss << integer; - return ss.str ( ); +template < > +unsigned from_string ( const string & value ) { + return stoul__private ( value.c_str() ); } string cstringToString ( char * param ) { diff --git a/alib2std/src/extensions/string.hpp b/alib2std/src/extensions/string.hpp index 72e07e958a..05f2d6792b 100644 --- a/alib2std/src/extensions/string.hpp +++ b/alib2std/src/extensions/string.hpp @@ -10,11 +10,21 @@ namespace std { -string itos ( int integer, int base = 10 ); +template<typename... Ts> +using to_string_type = auto(Ts...) -> decltype(to_string__private(std::declval<Ts>()...)); -unsigned stou ( const std::string &, int base = 10 ); +template < typename T, typename std::enable_if < std::is_function< to_string_type < T > >::value >::type* = nullptr > +string to_string ( T value ) { + return to_string__private ( value ); +} -string utos ( unsigned integer, int base = 10 ); +template < typename T, typename std::enable_if < std::is_constructible < string, T >::value >::type* = nullptr > +string to_string ( const T & value ) { + return (string) value; +} + +template < typename T > +T from_string ( const string & value ); template < > struct compare < string > { diff --git a/alib2std/src/string b/alib2std/src/string index 737c6d1083..a1276e2881 100644 --- a/alib2std/src/string +++ b/alib2std/src/string @@ -1,7 +1,20 @@ #ifndef __STRING_HEADER_WRAPPER_ #define __STRING_HEADER_WRAPPER_ +#define stoi stoi__private +#define stol stol__private +#define stoul stoul__private +#define stoull stoull__private +#define to_string to_string__private + #include <bits/../string> + +#undef stoi +#undef stol +#undef stoul +#undef stoull +#undef to_string + #include "compare" #include "extensions/string.hpp" diff --git a/alib2std/test-src/extensions/StringTest.cpp b/alib2std/test-src/extensions/StringTest.cpp new file mode 100644 index 0000000000..8f0145c486 --- /dev/null +++ b/alib2std/test-src/extensions/StringTest.cpp @@ -0,0 +1,22 @@ +#include "StringTest.h" +#include <random> + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( StringTest, "bits" ); +CPPUNIT_TEST_SUITE_REGISTRATION( StringTest ); + +void StringTest::setUp() { +} + +void StringTest::tearDown() { +} + +void StringTest::testToString() { + CPPUNIT_ASSERT ( std::is_function< std::to_string_type < int > >::value ); + CPPUNIT_ASSERT ( std::to_string ( std::string ( "1" ) ) == "1" ); + CPPUNIT_ASSERT ( std::to_string ( 1 ) == "1" ); + CPPUNIT_ASSERT ( std::to_string ( 1ul ) == "1" ); + + StringTest::A a; + CPPUNIT_ASSERT ( std::to_string ( a ) == "" ); +} + diff --git a/alib2std/test-src/extensions/StringTest.h b/alib2std/test-src/extensions/StringTest.h new file mode 100644 index 0000000000..b74cd437f5 --- /dev/null +++ b/alib2std/test-src/extensions/StringTest.h @@ -0,0 +1,26 @@ +#ifndef RANDOM_TEST_H_ +#define RANDOM_TEST_H_ + +#include <cppunit/extensions/HelperMacros.h> + +class StringTest : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE( StringTest ); + CPPUNIT_TEST( testToString ); + CPPUNIT_TEST_SUITE_END(); + + class A { + public: + explicit operator std::string ( ) const { + return ""; + } + }; + +public: + void setUp(); + void tearDown(); + + void testToString(); +}; + +#endif // RANDOM_TEST_H_ diff --git a/alib2str/src/graph/GraphFromStringParser.cpp b/alib2str/src/graph/GraphFromStringParser.cpp index b27259062e..1936dae457 100644 --- a/alib2str/src/graph/GraphFromStringParser.cpp +++ b/alib2str/src/graph/GraphFromStringParser.cpp @@ -223,7 +223,7 @@ int GraphFromStringParser::parseValue(std::istream &input) const throw exception::CommonException("Invalid input. Expected INTEGER"); } - return std::stoi(token.value); + return std::from_string < int > (token.value); } template<typename T> diff --git a/alib2str/src/primitive/PrimitiveFromStringParser.cpp b/alib2str/src/primitive/PrimitiveFromStringParser.cpp index ac0625f479..7cc79dc0a2 100644 --- a/alib2str/src/primitive/PrimitiveFromStringParser.cpp +++ b/alib2str/src/primitive/PrimitiveFromStringParser.cpp @@ -31,7 +31,7 @@ Primitive PrimitiveFromStringParser::parsePrimitive(std::istream& input, const s return Primitive(Character(token.value[0])); case PrimitiveFromStringLexer::TokenType::INTEGER: if(!features.count(FEATURES::INTEGER)) throw exception::CommonException("Disabled formalism Integer"); - return Primitive(Integer(std::stoi(token.value))); + return Primitive(Integer(std::from_string < int > (token.value))); case PrimitiveFromStringLexer::TokenType::ERROR: break; } diff --git a/alib2str/src/tree/TreeFromStringParser.cpp b/alib2str/src/tree/TreeFromStringParser.cpp index d6688a0f88..8c5d6124da 100644 --- a/alib2str/src/tree/TreeFromStringParser.cpp +++ b/alib2str/src/tree/TreeFromStringParser.cpp @@ -55,7 +55,7 @@ Tree TreeFromStringParser::parseTree ( std::istream & input, const std::set < FE if ( token.type == TreeFromStringLexer::TokenType::RANK ) { std::set < alphabet::RankedSymbol > nonlinearVariables; - rank = std::stou ( token.value ); + rank = std::from_string < unsigned > ( token.value ); std::vector < std::smart_ptr < tree::RankedNode > > childs; bool isPattern = false; @@ -136,7 +136,7 @@ tree::RankedNode TreeFromStringParser::parseRankedContent ( std::istream & input TreeFromStringLexer::Token token = m_TreeLexer.next ( input ); if ( token.type == TreeFromStringLexer::TokenType::RANK ) - rank = std::stou ( token.value ); + rank = std::from_string < unsigned > ( token.value ); else throw exception::CommonException ( "Missing rank" ); diff --git a/alib2str/src/tree/TreeToStringComposer.cpp b/alib2str/src/tree/TreeToStringComposer.cpp index c496990673..4defa6749e 100644 --- a/alib2str/src/tree/TreeToStringComposer.cpp +++ b/alib2str/src/tree/TreeToStringComposer.cpp @@ -24,7 +24,7 @@ TreeToStringComposer::RegistratorWrapper < void, RankedTree > StringToStringComp void TreeToStringComposer::compose ( std::ostream & out, const RankedNode & node ) { alib::stringApi < alphabet::Symbol >::compose ( out, node.getSymbol ( ).getSymbol ( ) ); - out << std::utos ( node.getSymbol ( ).getRank ( ).getData ( ) ); + out << std::to_string ( node.getSymbol ( ).getRank ( ).getData ( ) ); for ( const std::smart_ptr < const RankedNode > & child : node.getChildren ( ) ) { out << " "; @@ -44,7 +44,7 @@ void TreeToStringComposer::compose ( std::ostream & out, const alphabet::RankedS } else { alib::stringApi < alphabet::Symbol >::compose ( out, node.getSymbol ( ).getSymbol ( ) ); - out << std::utos ( node.getSymbol ( ).getRank ( ).getData ( ) ); + out << std::to_string ( node.getSymbol ( ).getRank ( ).getData ( ) ); for ( const std::smart_ptr < const RankedNode > & child : node.getChildren ( ) ) { out << " "; -- GitLab