From effe0e93400f56e86451e13117b30ca97ce62a54 Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Fri, 2 Oct 2015 01:57:39 -0400 Subject: [PATCH] fix long longs on linux --- include/xlnt/cell/cell.hpp | 4 +++ include/xlnt/cell/value.hpp | 4 +++ source/cell.cpp | 12 +++++++++ source/value.cpp | 50 +++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) diff --git a/include/xlnt/cell/cell.hpp b/include/xlnt/cell/cell.hpp index ba5e6d21..90a81785 100644 --- a/include/xlnt/cell/cell.hpp +++ b/include/xlnt/cell/cell.hpp @@ -124,6 +124,10 @@ public: void set_value(std::uint64_t i); #ifdef _WIN32 void set_value(unsigned long i); +#endif +#ifdef __linux__ + void set_value(long long i); + void set_value(unsigned long long i); #endif void set_value(float f); void set_value(double d); diff --git a/include/xlnt/cell/value.hpp b/include/xlnt/cell/value.hpp index bc2da2ed..696d4bcd 100644 --- a/include/xlnt/cell/value.hpp +++ b/include/xlnt/cell/value.hpp @@ -39,6 +39,10 @@ public: explicit value(std::uint64_t i); #ifdef _WIN32 explicit value(unsigned long i); +#endif +#ifdef __linux__ + explicit value(long long i); + explicit value(unsigned long long i); #endif explicit value(float f); explicit value(double d); diff --git a/source/cell.cpp b/source/cell.cpp index 5fdf41cb..9592ba8e 100644 --- a/source/cell.cpp +++ b/source/cell.cpp @@ -349,6 +349,18 @@ void cell::set_value(unsigned long i) } #endif +#ifdef __linux__ +void cell::set_value(long long i) +{ + d_->value_ = value(i); +} + +void cell::set_value(unsigned long long i) +{ + d_->value_ = value(i); +} +#endif + void cell::set_value(double d) { d_->value_ = value(d); diff --git a/source/value.cpp b/source/value.cpp index e3acbfd5..3b7cbf99 100644 --- a/source/value.cpp +++ b/source/value.cpp @@ -70,6 +70,16 @@ value::value(unsigned long i) : type_(type::numeric), numeric_value_(i) } #endif +#ifdef __linux__ +value::value(long long i) : type_(type::numeric), numeric_value_(i) +{ +} + +value::value(unsigned long long i) : type_(type::numeric), numeric_value_(i) +{ +} +#endif + value::value(float f) : type_(type::numeric), numeric_value_(f) { } @@ -323,6 +333,46 @@ unsigned long value::as() const } #endif +#ifdef __linux__ +template<> +long long value::as() const +{ + switch (type_) + { + case type::boolean: + case type::numeric: + return static_cast(numeric_value_); + case type::string: + return std::stoi(string_value_); + case type::error: + throw std::runtime_error("invalid"); + case type::null: + return 0; + } + + return 0; +} + +template<> +unsigned long long value::as() const +{ + switch (type_) + { + case type::boolean: + case type::numeric: + return static_cast(numeric_value_); + case type::string: + return std::stoi(string_value_); + case type::error: + throw std::runtime_error("invalid"); + case type::null: + return 0; + } + + return 0; +} +#endif + template<> std::string value::as() const {