From cb7fbcaf794a634b3fbd58cb726f8db996518d66 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sat, 4 Mar 2017 21:51:36 +0100 Subject: [PATCH] add unsigned long primitive type binding --- alib2common/src/primitive/UnsignedLong.cpp | 97 ++++++++++++++++++++++ alib2common/src/primitive/UnsignedLong.h | 86 +++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 alib2common/src/primitive/UnsignedLong.cpp create mode 100644 alib2common/src/primitive/UnsignedLong.h diff --git a/alib2common/src/primitive/UnsignedLong.cpp b/alib2common/src/primitive/UnsignedLong.cpp new file mode 100644 index 0000000000..245439b736 --- /dev/null +++ b/alib2common/src/primitive/UnsignedLong.cpp @@ -0,0 +1,97 @@ +/* + * UnsignedLong.cpp + * + * Created on: Mar 26, 2013 + * Author: Jan Travnicek + */ + +#include "UnsignedLong.h" +#include <sax/FromXMLParserHelper.h> +#include "Primitive.h" +#include <object/Object.h> + +namespace primitive { + +UnsignedLong::UnsignedLong(unsigned long data) : m_data(data) { + +} + +PrimitiveBase* UnsignedLong::clone() const { + return new UnsignedLong(*this); +} + +PrimitiveBase* UnsignedLong::plunder() && { + return new UnsignedLong(std::move(*this)); +} + +unsigned long UnsignedLong::getData() const { + return m_data; +} + +UnsignedLong::operator unsigned long ( ) const { + return m_data; +} + +void UnsignedLong::setData(unsigned long data) { + this->m_data = data; +} + +int UnsignedLong::compare(const UnsignedLong& other) const { + return m_data - other.m_data; +} + +void UnsignedLong::operator>>(std::ostream& out) const { + out << "(UnsignedLong " << m_data << ")"; +} + +UnsignedLong::operator std::string() const { + return std::to_string(m_data); +} + +UnsignedLong UnsignedLong::parse(std::deque<sax::Token>::iterator& input) { + return UnsignedLong(parseRaw(input)); +} + +unsigned long UnsignedLong::parseRaw(std::deque<sax::Token>::iterator& input) { + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, UnsignedLong::getXmlTagName()); + unsigned long data = std::from_string < unsigned long > (sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER)); + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, UnsignedLong::getXmlTagName()); + return data; +} + +void UnsignedLong::compose(std::deque<sax::Token>& out) const { + compose(out, this->getData()); +} + +void UnsignedLong::compose(std::deque<sax::Token>& out, unsigned long primitive) { + out.emplace_back(UnsignedLong::getXmlTagName(), sax::Token::TokenType::START_ELEMENT); + out.emplace_back(std::to_string(primitive), sax::Token::TokenType::CHARACTER); + out.emplace_back(UnsignedLong::getXmlTagName(), sax::Token::TokenType::END_ELEMENT); +} + +PrimitiveBase * UnsignedLong::inc() && { + m_data++; + return NULL; +} + +} /* namespace primitive */ + +namespace alib { + +unsigned long xmlApi<unsigned long>::parse(std::deque<sax::Token>::iterator& input) { + return primitive::UnsignedLong::parseRaw(input); +} + +bool xmlApi<unsigned long>::first(const std::deque<sax::Token>::const_iterator& input) { + return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::UnsignedLong::getXmlTagName()); +} + +void xmlApi<unsigned long>::compose(std::deque<sax::Token>& output, unsigned long data) { + primitive::UnsignedLong::compose(output, data); +} + +auto unsignedLongParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::UnsignedLong>(); +auto unsignedLongParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::UnsignedLong>(); + +} /* namespace alib */ + diff --git a/alib2common/src/primitive/UnsignedLong.h b/alib2common/src/primitive/UnsignedLong.h new file mode 100644 index 0000000000..da68b24e9e --- /dev/null +++ b/alib2common/src/primitive/UnsignedLong.h @@ -0,0 +1,86 @@ +/* + * UnsignedLong.h + * + * Created on: Mar 26, 2013 + * Author: Jan Travnicek + */ + +#ifndef PRIMITIVE_UNSIGNED_LONG_H_ +#define PRIMITIVE_UNSIGNED_LONG_H_ + +#include "PrimitiveBase.h" +#include <core/xmlApi.hpp> + +namespace primitive { + +/** + * Represents symbol in an alphabet. + */ +class UnsignedLong : public PrimitiveBase { +protected: + unsigned long m_data; + +public: + /** + * Creates new symbol with given name. + * @param symbol name of the symbol + */ + explicit UnsignedLong ( unsigned long data ); + + virtual PrimitiveBase * clone ( ) const; + + virtual PrimitiveBase * plunder ( ) &&; + + /** + * @return name of the symbol + */ + unsigned long getData ( ) const; + + explicit operator unsigned long ( ) const; + + /** + * sets new content of primitive + */ + void setData ( unsigned long data ); + + virtual int compare ( const ObjectBase & other ) const { + if ( std::type_index ( typeid ( * this ) ) == std::type_index ( typeid ( other ) ) ) return this->compare ( ( decltype ( * this ) )other ); + + return std::type_index ( typeid ( * this ) ) - std::type_index ( typeid ( other ) ); + } + + virtual int compare ( const UnsignedLong & other ) const; + + virtual void operator >>( std::ostream & ) const; + + virtual explicit operator std::string ( ) const; + + static const std::string & getXmlTagName() { + static std::string xmlTagName = "UnsignedLong"; + + return xmlTagName; + } + + static UnsignedLong parse ( std::deque < sax::Token >::iterator & input ); + static unsigned long parseRaw ( std::deque < sax::Token >::iterator & input ); + + void compose ( std::deque < sax::Token > & out ) const; + static void compose ( std::deque < sax::Token > & out, unsigned long primitive ); + + virtual PrimitiveBase * inc ( ) &&; +}; + +} /* namespace primitive */ + +namespace alib { + +template < > +struct xmlApi < unsigned long > { + static unsigned long parse ( std::deque < sax::Token >::iterator & input ); + static bool first ( const std::deque < sax::Token >::const_iterator & input ); + static void compose ( std::deque < sax::Token > & output, unsigned long data ); +}; + +} /* namespace alib */ + +#endif /* PRIMITIVE_UNSIGNED_LONG_H_ */ -- GitLab