From ec7fabb1f0422b432e4100c5f68329f71dc1de2f Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 29 Sep 2014 08:21:57 +0200
Subject: [PATCH] Hexavigesimal labels

---
 alib2data/src/Api.cpp                         | 12 ++++
 alib2data/src/Api.hpp                         |  7 +++
 alib2data/src/label/HexavigesimalLabel.cpp    | 59 ++++++++++++++++++
 alib2data/src/label/HexavigesimalLabel.h      | 61 +++++++++++++++++++
 alib2data/src/label/LabelBase.h               |  2 +-
 alib2data/src/label/LabelFeatures.h           |  1 +
 alib2data/src/label/LabelFromStringParser.cpp |  2 +-
 alib2data/src/label/LabelFromXMLParser.cpp    | 12 +++-
 alib2data/src/label/LabelFromXMLParser.h      |  2 +
 alib2data/src/label/LabelToStringComposer.cpp |  7 +++
 alib2data/src/label/LabelToStringComposer.h   |  1 +
 alib2data/src/label/LabelToXMLComposer.cpp    |  8 +++
 alib2data/src/label/LabelToXMLComposer.h      |  1 +
 alib2data/src/label/NextLabel.cpp             |  7 +++
 alib2data/src/label/NextLabel.h               |  1 +
 alib2data/src/object/ObjectBase.h             |  5 +-
 alib2data/src/std/hexavigesimal.cpp           | 23 +++++--
 alib2data/src/std/hexavigesimal.h             |  4 +-
 18 files changed, 203 insertions(+), 12 deletions(-)
 create mode 100644 alib2data/src/label/HexavigesimalLabel.cpp
 create mode 100644 alib2data/src/label/HexavigesimalLabel.h

diff --git a/alib2data/src/Api.cpp b/alib2data/src/Api.cpp
index 6257489711..22d1416d4b 100644
--- a/alib2data/src/Api.cpp
+++ b/alib2data/src/Api.cpp
@@ -388,6 +388,14 @@ std::list<sax::Token> api<label::PrimitiveLabel>::compose(const label::Primitive
 	return ToXMLComposers::labelComposer.compose(data);
 }
 
+label::HexavigesimalLabel api<label::HexavigesimalLabel>::parse(std::list<sax::Token>& input) {
+	return FromXMLParsers::labelParser.parseHexavigesimalLabel(input);
+}
+
+std::list<sax::Token> api<label::HexavigesimalLabel>::compose(const label::HexavigesimalLabel& data) {
+	return ToXMLComposers::labelComposer.compose(data);
+}
+
 label::ObjectLabel api<label::ObjectLabel>::parse(std::list<sax::Token>& input) {
 	return FromXMLParsers::labelParser.parseObjectLabel(input);
 }
@@ -656,6 +664,10 @@ void ToXMLComposers::Visit(void* data, const label::PrimitiveLabel& label) const
 	*((std::list<sax::Token>*) data) = std::move(api<label::PrimitiveLabel>::compose(label));
 }
 
+void ToXMLComposers::Visit(void* data, const label::HexavigesimalLabel& label) const {
+	*((std::list<sax::Token>*) data) = std::move(api<label::HexavigesimalLabel>::compose(label));
+}
+
 void ToXMLComposers::Visit(void* data, const label::ObjectLabel& label) const {
 	*((std::list<sax::Token>*) data) = std::move(api<label::ObjectLabel>::compose(label));
 }
diff --git a/alib2data/src/Api.hpp b/alib2data/src/Api.hpp
index 74cad3c649..28dfdc7df1 100644
--- a/alib2data/src/Api.hpp
+++ b/alib2data/src/Api.hpp
@@ -326,6 +326,12 @@ struct api<label::PrimitiveLabel> {
 	static std::list<sax::Token> compose(const label::PrimitiveLabel& data);
 };
 
+template<>
+struct api<label::HexavigesimalLabel> {
+	static label::HexavigesimalLabel parse(std::list<sax::Token>& input);
+	static std::list<sax::Token> compose(const label::HexavigesimalLabel& data);
+};
+
 template<>
 struct api<label::ObjectLabel> {
 	static label::ObjectLabel parse(std::list<sax::Token>& input);
@@ -485,6 +491,7 @@ class ToXMLComposers : public VisitableObjectBase::const_visitor_type {
 	void Visit(void*, const grammar::UnrestrictedGrammar& grammar) const;
 
 	void Visit(void*, const label::PrimitiveLabel& label) const;
+	void Visit(void*, const label::HexavigesimalLabel& label) const;
 	void Visit(void*, const label::ObjectLabel& label) const;
 	void Visit(void*, const label::LabelSetLabel& label) const;
 	void Visit(void*, const label::LabelPairLabel& label) const;
diff --git a/alib2data/src/label/HexavigesimalLabel.cpp b/alib2data/src/label/HexavigesimalLabel.cpp
new file mode 100644
index 0000000000..58c101f8af
--- /dev/null
+++ b/alib2data/src/label/HexavigesimalLabel.cpp
@@ -0,0 +1,59 @@
+/*
+ * HexavigesimalLabel.cpp
+ *
+ *  Created on: Mar 26, 2013
+ *      Author: Jan Travicek
+ */
+
+#include "HexavigesimalLabel.h"
+#include "../std/hexavigesimal.h"
+
+namespace label {
+
+HexavigesimalLabel::HexavigesimalLabel(int hexavigesimal) : hexavigesimal(hexavigesimal) {
+
+}
+
+LabelBase* HexavigesimalLabel::clone() const {
+	return new HexavigesimalLabel(*this);
+}
+
+LabelBase* HexavigesimalLabel::plunder() && {
+	return new HexavigesimalLabel(std::move(*this));
+}
+
+int HexavigesimalLabel::getData() const {
+	return hexavigesimal;
+}
+
+bool HexavigesimalLabel::operator<(const alib::ObjectBase& other) const {
+	return other > *this;
+}
+
+bool HexavigesimalLabel::operator==(const alib::ObjectBase& other) const {
+	return other == *this;
+}
+
+bool HexavigesimalLabel::operator >(const alib::ObjectBase& other) const {
+	return other < *this;
+}
+
+
+bool HexavigesimalLabel::operator <(const HexavigesimalLabel& other) const {
+	return hexavigesimal < other.hexavigesimal;
+}
+
+bool HexavigesimalLabel::operator ==(const HexavigesimalLabel& other) const {
+	return hexavigesimal == other.hexavigesimal;
+}
+
+void HexavigesimalLabel::operator>>(std::ostream& out) const {
+	out << "(HexavigesimalLabel " << std::toBase26(hexavigesimal) << ")";
+}
+
+HexavigesimalLabel::operator std::string() const {
+	return std::toBase26(hexavigesimal);
+}
+
+} /* namespace label */
+
diff --git a/alib2data/src/label/HexavigesimalLabel.h b/alib2data/src/label/HexavigesimalLabel.h
new file mode 100644
index 0000000000..d0a883a77e
--- /dev/null
+++ b/alib2data/src/label/HexavigesimalLabel.h
@@ -0,0 +1,61 @@
+/*
+ * HexavigesimalLabel.h
+ *
+ *  Created on: Mar 26, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef HEXAVIGESIMAL_LABEL_H_
+#define HEXAVIGESIMAL_LABEL_H_
+
+#include "../std/hexavigesimal.h"
+#include <ostream>
+
+#include "LabelBase.h"
+
+namespace label {
+
+/**
+ * Represents symbol in an alphabet.
+ */
+class HexavigesimalLabel : public std::acceptor<HexavigesimalLabel, VisitableLabelBase, std::acceptor<HexavigesimalLabel, alib::VisitableObjectBase, LabelBase> > {
+protected:
+	int hexavigesimal;
+public:
+	virtual LabelBase* clone() const;
+
+	virtual LabelBase* plunder() &&;
+
+	/**
+	 * Creates new symbol with given name.
+	 * @param symbol name of the symbol
+	 */
+	explicit HexavigesimalLabel(int  hexavigesimal);
+
+	virtual bool operator<(const alib::ObjectBase& other) const;
+	
+	virtual bool operator>(const alib::ObjectBase& other) const;
+
+	virtual bool operator==(const alib::ObjectBase& other) const;
+
+	/**
+	 * @return name of the symbol
+	 */
+	int getData() const;
+
+	virtual bool operator <(const HexavigesimalLabel& other) const;
+	virtual bool operator ==(const HexavigesimalLabel& other) const;
+
+	virtual void operator>>(std::ostream&) const;
+
+	virtual operator std::string () const;
+
+	virtual int selfTypeId() const {
+		return typeId(*this);
+	}
+};
+
+} /* namespace label */
+
+#endif /* HEXAVIGESIMAL_LABEL_H_ */
+
diff --git a/alib2data/src/label/LabelBase.h b/alib2data/src/label/LabelBase.h
index 9e1ee9c27e..58df68b672 100644
--- a/alib2data/src/label/LabelBase.h
+++ b/alib2data/src/label/LabelBase.h
@@ -14,7 +14,7 @@
 namespace label {
 
 typedef std::acceptor_base<
-			label::PrimitiveLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel
+			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel
 	> VisitableLabelBase;
 
 /**
diff --git a/alib2data/src/label/LabelFeatures.h b/alib2data/src/label/LabelFeatures.h
index a6cd2f7a46..7ec1c1c76b 100644
--- a/alib2data/src/label/LabelFeatures.h
+++ b/alib2data/src/label/LabelFeatures.h
@@ -12,6 +12,7 @@ namespace label {
 
 enum class FEATURES {
 	PRIMITIVE,
+	HEXAVIGESIMAL,
 	OBJECT,
 	LABEL_SET,
 	LABEL_PAIR
diff --git a/alib2data/src/label/LabelFromStringParser.cpp b/alib2data/src/label/LabelFromStringParser.cpp
index cb89cdf7a7..1e532ceb80 100644
--- a/alib2data/src/label/LabelFromStringParser.cpp
+++ b/alib2data/src/label/LabelFromStringParser.cpp
@@ -20,7 +20,7 @@ LabelFromStringParser::LabelFromStringParser(std::istream& input) : m_Lexer(inpu
 }
 
 Label LabelFromStringParser::parse() {
-	return parse(std::set<FEATURES>({FEATURES::PRIMITIVE, FEATURES::OBJECT, FEATURES::LABEL_SET, FEATURES::LABEL_PAIR}));
+	return parse(std::set<FEATURES>({FEATURES::PRIMITIVE, FEATURES::HEXAVIGESIMAL, FEATURES::OBJECT, FEATURES::LABEL_SET, FEATURES::LABEL_PAIR}));
 }
 
 Label LabelFromStringParser::parse(const std::set<FEATURES>& features) {
diff --git a/alib2data/src/label/LabelFromXMLParser.cpp b/alib2data/src/label/LabelFromXMLParser.cpp
index 471f3b0840..adcd1a45f5 100644
--- a/alib2data/src/label/LabelFromXMLParser.cpp
+++ b/alib2data/src/label/LabelFromXMLParser.cpp
@@ -13,13 +13,16 @@
 namespace label {
 
 Label LabelFromXMLParser::parseLabel(std::list<sax::Token>& input) const {
-	return parseLabel(input, std::set<FEATURES>({FEATURES::PRIMITIVE, FEATURES::OBJECT, FEATURES::LABEL_SET, FEATURES::LABEL_PAIR}));
+	return parseLabel(input, std::set<FEATURES>({FEATURES::PRIMITIVE, FEATURES::HEXAVIGESIMAL, FEATURES::OBJECT, FEATURES::LABEL_SET, FEATURES::LABEL_PAIR}));
 }
 
 Label LabelFromXMLParser::parseLabel(std::list<sax::Token>& input, const std::set<FEATURES>& features) const {
 	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "PrimitiveLabel")) {
 		if(!features.count(FEATURES::PRIMITIVE)) throw exception::AlibException();
 		return Label(parsePrimitiveLabel(input));
+	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "HexavigesimalLabel")) {
+		if(!features.count(FEATURES::HEXAVIGESIMAL)) throw exception::AlibException();
+		return Label(parseHexavigesimalLabel(input));
 	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "ObjectLabel")) {
 		if(!features.count(FEATURES::OBJECT)) throw exception::AlibException();
 		return Label(parseObjectLabel(input));
@@ -49,6 +52,13 @@ PrimitiveLabel LabelFromXMLParser::parsePrimitiveLabel(std::list<sax::Token>& in
 	return data;
 }
 
+HexavigesimalLabel LabelFromXMLParser::parseHexavigesimalLabel(std::list<sax::Token>& input) const {
+	popToken(input, sax::Token::TokenType::START_ELEMENT, "HexavigesimalLabel");
+	HexavigesimalLabel data(std::stoi(popTokenData(input, sax::Token::TokenType::CHARACTER)));
+	popToken(input, sax::Token::TokenType::END_ELEMENT, "HexavigesimalLabel");
+	return data;
+}
+
 ObjectLabel LabelFromXMLParser::parseObjectLabel(std::list<sax::Token>& input) const {
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "ObjectLabel");
 	ObjectLabel data(alib::api<alib::Object>::parse(input));
diff --git a/alib2data/src/label/LabelFromXMLParser.h b/alib2data/src/label/LabelFromXMLParser.h
index 352d11af8d..0810178486 100644
--- a/alib2data/src/label/LabelFromXMLParser.h
+++ b/alib2data/src/label/LabelFromXMLParser.h
@@ -14,6 +14,7 @@
 #include "Label.h"
 #include "LabelFeatures.h"
 #include "PrimitiveLabel.h"
+#include "HexavigesimalLabel.h"
 #include "ObjectLabel.h"
 #include "LabelSetLabel.h"
 #include "LabelPairLabel.h"
@@ -36,6 +37,7 @@ class LabelFromXMLParser : public sax::FromXMLParserHelper {
 	Label parseLabel(std::list<sax::Token>& input) const;
 
 	PrimitiveLabel parsePrimitiveLabel(std::list<sax::Token>& input) const;
+	HexavigesimalLabel parseHexavigesimalLabel(std::list<sax::Token>& input) const;
 	ObjectLabel parseObjectLabel(std::list<sax::Token>& input) const;
 	LabelSetLabel parseLabelSetLabel(std::list<sax::Token>& input) const;
 	LabelPairLabel parseLabelPairLabel(std::list<sax::Token>& input) const;
diff --git a/alib2data/src/label/LabelToStringComposer.cpp b/alib2data/src/label/LabelToStringComposer.cpp
index b3134e15f5..a4fc5dfb83 100644
--- a/alib2data/src/label/LabelToStringComposer.cpp
+++ b/alib2data/src/label/LabelToStringComposer.cpp
@@ -9,6 +9,7 @@
 #include "../primitive/PrimitiveToStringComposer.h"
 #include <algorithm>
 #include "PrimitiveLabel.h"
+#include "HexavigesimalLabel.h"
 #include "ObjectLabel.h"
 #include "LabelSetLabel.h"
 #include "LabelPairLabel.h"
@@ -24,6 +25,12 @@ void LabelToStringComposer::Visit(void* userData, const PrimitiveLabel& label) {
 	out << composer.compose(label.getData());
 }
 
+void LabelToStringComposer::Visit(void* userData, const HexavigesimalLabel& label) {
+	std::stringstream &out = *((std::stringstream*) userData);
+
+	out << (std::string) label;
+}
+
 void LabelToStringComposer::Visit(void* userData, const ObjectLabel& label) {
 	std::stringstream &out = *((std::stringstream*) userData);
 	out << (std::string) label;
diff --git a/alib2data/src/label/LabelToStringComposer.h b/alib2data/src/label/LabelToStringComposer.h
index 8c76d72235..52cd1ca82f 100644
--- a/alib2data/src/label/LabelToStringComposer.h
+++ b/alib2data/src/label/LabelToStringComposer.h
@@ -19,6 +19,7 @@ namespace label {
  */
 class LabelToStringComposer : public VisitableLabelBase::visitor_type {
 	void Visit(void*, const PrimitiveLabel& label);
+	void Visit(void*, const HexavigesimalLabel& label);
 	void Visit(void*, const ObjectLabel& label);
 	void Visit(void*, const LabelSetLabel& label);
 	void Visit(void*, const LabelPairLabel& label);
diff --git a/alib2data/src/label/LabelToXMLComposer.cpp b/alib2data/src/label/LabelToXMLComposer.cpp
index 5047282134..de7875afd3 100644
--- a/alib2data/src/label/LabelToXMLComposer.cpp
+++ b/alib2data/src/label/LabelToXMLComposer.cpp
@@ -32,6 +32,14 @@ std::list<sax::Token> LabelToXMLComposer::compose(const PrimitiveLabel& label) c
 	return out;
 }
 
+std::list<sax::Token> LabelToXMLComposer::compose(const HexavigesimalLabel& label) const {
+	std::list<sax::Token> out;
+	out.push_back(sax::Token("HexavigesimalLabel", sax::Token::TokenType::START_ELEMENT));
+	out.push_back(sax::Token(std::itos(label.getData()), sax::Token::TokenType::CHARACTER));
+	out.push_back(sax::Token("HexavigesimalLabel", sax::Token::TokenType::END_ELEMENT));
+	return out;
+}
+
 std::list<sax::Token> LabelToXMLComposer::compose(const ObjectLabel& label) const {
 	std::list<sax::Token> out;
 	out.push_back(sax::Token("ObjectLabel", sax::Token::TokenType::START_ELEMENT));
diff --git a/alib2data/src/label/LabelToXMLComposer.h b/alib2data/src/label/LabelToXMLComposer.h
index 778df93f4e..b8349e8f57 100644
--- a/alib2data/src/label/LabelToXMLComposer.h
+++ b/alib2data/src/label/LabelToXMLComposer.h
@@ -40,6 +40,7 @@ class LabelToXMLComposer {
 	std::list<sax::Token> compose(const Label& label) const;
 
 	std::list<sax::Token> compose(const PrimitiveLabel& label) const;
+	std::list<sax::Token> compose(const HexavigesimalLabel& label) const;
 	std::list<sax::Token> compose(const ObjectLabel& label) const;
 	std::list<sax::Token> compose(const LabelSetLabel& label) const;
 	std::list<sax::Token> compose(const LabelPairLabel& label) const;
diff --git a/alib2data/src/label/NextLabel.cpp b/alib2data/src/label/NextLabel.cpp
index 2796aea9e4..ed78de02f7 100644
--- a/alib2data/src/label/NextLabel.cpp
+++ b/alib2data/src/label/NextLabel.cpp
@@ -8,6 +8,7 @@
 #include "NextLabel.h"
 #include "../primitive/NextPrimitive.h"
 #include "PrimitiveLabel.h"
+#include "HexavigesimalLabel.h"
 #include "../std/itos.h"
 #include "../exception/AlibException.h"
 
@@ -20,6 +21,12 @@ void NextLabel::Visit(void* userData, const PrimitiveLabel& label) {
 	out = new Label(PrimitiveLabel(next.nextPrimitive(label.getData())));
 }
 
+void NextLabel::Visit(void* userData, const HexavigesimalLabel& label) {
+	Label* &out = *((Label**) userData);
+
+	out = new Label(HexavigesimalLabel(label.getData() + 1));
+}
+
 void NextLabel::Visit(void*, const ObjectLabel&) {
 	throw exception::AlibException("LabelSet has no next Label.");
 }
diff --git a/alib2data/src/label/NextLabel.h b/alib2data/src/label/NextLabel.h
index 544a5eb832..dee5b2a7ad 100644
--- a/alib2data/src/label/NextLabel.h
+++ b/alib2data/src/label/NextLabel.h
@@ -19,6 +19,7 @@ namespace label {
  */
 class NextLabel : public VisitableLabelBase::visitor_type {
 	void Visit(void*, const PrimitiveLabel& label);
+	void Visit(void*, const HexavigesimalLabel& label);
 	void Visit(void*, const ObjectLabel& label);
 	void Visit(void*, const LabelSetLabel& label);
 	void Visit(void*, const LabelPairLabel& label);
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 475fd55bf9..3f8e1e127c 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -59,6 +59,7 @@ namespace label {
 
 class PrimitiveLabel;
 class ObjectLabel;
+class HexavigesimalLabel;
 class LabelSetLabel;
 class LabelPairLabel;
 
@@ -111,7 +112,7 @@ typedef std::acceptor_base<
 			exception::AlibException,
 			automaton::UnknownAutomaton, automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM,
 			grammar::UnknownGrammar, grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
-			label::PrimitiveLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel,
+			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel,
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
 			alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::EndSymbol,
@@ -125,7 +126,7 @@ class ObjectBase :
 			exception::AlibException,
 			automaton::UnknownAutomaton, automaton::DFA, automaton::NFA, automaton::EpsilonNFA, automaton::CompactNFA, automaton::ExtendedNFA, automaton::DPDA, automaton::SinglePopDPDA, automaton::InputDrivenNPDA, automaton::VisiblyPushdownNPDA, automaton::RealTimeHeightDeterministicNPDA, automaton::NPDA, automaton::SinglePopNPDA, automaton::OneTapeDTM,
 			grammar::UnknownGrammar, grammar::LeftLG, grammar::LeftRG, grammar::RightLG, grammar::RightRG, grammar::LG, grammar::CFG, grammar::EpsilonFreeCFG, grammar::CNF, grammar::GNF, grammar::CSG, grammar::NonContractingGrammar, grammar::ContextPreservingUnrestrictedGrammar, grammar::UnrestrictedGrammar,
-			label::PrimitiveLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel,
+			label::PrimitiveLabel, label::HexavigesimalLabel, label::ObjectLabel, label::LabelSetLabel, label::LabelPairLabel,
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
 			alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::EndSymbol,
diff --git a/alib2data/src/std/hexavigesimal.cpp b/alib2data/src/std/hexavigesimal.cpp
index 8b68bbc4e6..3a750e2621 100644
--- a/alib2data/src/std/hexavigesimal.cpp
+++ b/alib2data/src/std/hexavigesimal.cpp
@@ -9,16 +9,29 @@
 
 namespace std {
 
-string toBase26( int id ) {
+unsigned fromBase26( string rep ) {
+	// http://en.wikipedia.org/wiki/Hexavigesimal
+
+	unsigned n = 0;
+	for(char repSymbol : rep ) {
+		unsigned remainder = repSymbol - 'A';
+		if(remainder > 26)
+			throw 1; //("Invalid argument"); //TODO fix
+		n = n * 26 + remainder;
+	}
+
+	return n;
+}
+
+string toBase26( unsigned id ) {
 	// http://en.wikipedia.org/wiki/Hexavigesimal
 
-	unsigned int n = id;
 	string name;
 	do {
-		unsigned int remainder = n % 26;
+		unsigned remainder = id % 26;
 		name += ( char )( remainder + 'A' );
-		n = (n - remainder) / 26;
-	} while (n > 0);
+		id = (id - remainder) / 26;
+	} while (id > 0);
 
 	return string( name.rbegin( ), name.rend( ) );
 }
diff --git a/alib2data/src/std/hexavigesimal.h b/alib2data/src/std/hexavigesimal.h
index a6812eb1ed..36147c76c0 100644
--- a/alib2data/src/std/hexavigesimal.h
+++ b/alib2data/src/std/hexavigesimal.h
@@ -15,8 +15,8 @@ namespace std {
 /**
  * Maps 1 -> A, 2 -> B, ..., AA, AB, AC, ... , AAA, AAB, ...
  * http://en.wikipedia.org/wiki/Hexavigesimal
- */
-std::string toBase26( int n );
+ *///FIXME opravdu to mapuje takhle?
+std::string toBase26( unsigned n );
 
 } /* namespace std */
 
-- 
GitLab