fix windows build and warnings

This commit is contained in:
Thomas Fussell 2015-11-02 17:25:10 -05:00
parent 9c05e04f70
commit 90d8d545ed
9 changed files with 89 additions and 59 deletions

View File

@ -19,6 +19,7 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
add_definitions(-DUNICODE -D_UNICODE)
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)

View File

@ -17,6 +17,10 @@ source_group(helpers FILES ${TEST_HELPERS_HEADERS} ${TEST_HELPERS_SOURCES})
target_link_libraries(xlnt.test xlnt)
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
target_link_libraries(xlnt.test Shlwapi)
endif()
add_custom_target (generate-test-runner
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate-tests
COMMENT "Generating test runner tests/runner-autogen.cpp"
@ -24,9 +28,11 @@ add_custom_target (generate-test-runner
add_dependencies(xlnt.test generate-test-runner)
add_custom_command(
if(${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
add_custom_command(
TARGET xlnt.test
POST_BUILD
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../bin/xlnt.test
VERBATIM
)
)
endif()

2
configure vendored
View File

@ -33,7 +33,7 @@ if len(sys.argv) > 1:
elif sys.platform == 'darwin':
generator = 'Unix Makefiles'
elif sys.platform == 'win32':
generator = 'Visual Studio 14 2015'
generator = 'Visual Studio 14 2015 Win64'
cmake = 'cmake'

View File

@ -147,29 +147,17 @@ class font
std::size_t hash() const
{
std::size_t seed = bold_;
seed = seed << 1 & italic_;
seed = seed << 1 & superscript_;
seed = seed << 1 & subscript_;
seed = seed << 1 & strikethrough_;
std::size_t seed = 0;
hash_combine(seed, bold_);
hash_combine(seed, italic_);
hash_combine(seed, superscript_);
hash_combine(seed, subscript_);
hash_combine(seed, strikethrough_);
hash_combine(seed, name_);
hash_combine(seed, size_);
hash_combine(seed, static_cast<std::size_t>(underline_));
hash_combine(seed, static_cast<std::size_t>(color_.get_type()));
switch (color_.get_type())
{
case color::type::indexed:
hash_combine(seed, color_.get_index());
break;
case color::type::theme:
hash_combine(seed, color_.get_theme());
break;
default:
break;
}
hash_combine(seed, color_.hash());
hash_combine(seed, family_);
hash_combine(seed, scheme_);

View File

@ -212,16 +212,16 @@ class workbook
void add_number_format(const number_format &format);
void add_protection(const protection &p);
std::vector<style> get_styles() const;
const std::vector<style> &get_styles() const;
std::vector<color> get_colors() const;
std::vector<border> get_borders() const;
std::vector<fill> get_fills() const;
std::vector<font> get_fonts() const;
std::vector<number_format> get_number_formats() const;
const std::vector<color> &get_colors() const;
const std::vector<border> &get_borders() const;
const std::vector<fill> &get_fills() const;
const std::vector<font> &get_fonts() const;
const std::vector<number_format> &get_number_formats() const;
std::size_t add_indexed_color(const std::string &rgb);
std::string get_indexed_color(std::size_t color_index) const;
color add_indexed_color(const color &rgb_color);
color get_indexed_color(const color &indexed_color) const;
const number_format &get_number_format(std::size_t style_id) const;
std::size_t set_number_format(const number_format &format, std::size_t style_id);

View File

@ -3,6 +3,22 @@
#include <xlnt/common/datetime.hpp>
namespace {
std::tm safe_localtime(std::time_t raw_time)
{
#ifdef _MSC_VER
std::tm result;
localtime_s(&result, &raw_time);
return result;
#else
return *localtime(&raw_time);
#endif
}
} // namespace
namespace xlnt {
time time::from_number(long double raw_time)
@ -163,15 +179,15 @@ std::string datetime::to_string(xlnt::calendar /*base_date*/) const
date date::today()
{
std::time_t raw_time = std::time(0);
std::tm now = *std::localtime(&raw_time);
std::tm now = safe_localtime(std::time(0));
return date(1900 + now.tm_year, now.tm_mon + 1, now.tm_mday);
}
datetime datetime::now()
{
std::time_t raw_time = std::time(0);
std::tm now = *std::localtime(&raw_time);
std::tm now = safe_localtime(std::time(0));
return datetime(1900 + now.tm_year, now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec);
}

View File

@ -1,5 +1,9 @@
#include <xlnt/serialization/comment_serializer.hpp>
namespace {
namespace xlnt {
comment_serializer::comment_serializer(worksheet sheet) : sheet_(sheet)
{
}
} // namespace xlnt

View File

@ -90,11 +90,10 @@ bool load_workbook(xlnt::zip_file &archive, bool guess_types, bool data_only, xl
if(archive.has_file(xlnt::constants::ArcSharedString()))
{
xlnt::shared_strings_serializer shared_strings_serializer_;
std::vector<std::string> shared_strings;
xlnt::xml_document shared_strings_xml;
shared_strings_xml.from_string(archive.read(xlnt::constants::ArcSharedString()));
shared_strings_serializer_.read_shared_strings(shared_strings_xml, shared_strings);
xlnt::shared_strings_serializer::read_shared_strings(shared_strings_xml, shared_strings);
for (auto shared_string : shared_strings)
{
@ -194,10 +193,8 @@ excel_serializer::excel_serializer(workbook &wb) : workbook_(wb)
void excel_serializer::write_data(bool /*as_template*/)
{
relationship_serializer relationship_serializer_;
relationship_serializer_.write_relationships(workbook_.get_root_relationships(), "", archive_);
relationship_serializer_.write_relationships(workbook_.get_relationships(), constants::ArcWorkbook(), archive_);
relationship_serializer::write_relationships(workbook_.get_root_relationships(), "", archive_);
relationship_serializer::write_relationships(workbook_.get_relationships(), constants::ArcWorkbook(), archive_);
xml_document properties_app_xml;
workbook_serializer workbook_serializer_(workbook_);
@ -207,10 +204,9 @@ void excel_serializer::write_data(bool /*as_template*/)
theme_serializer theme_serializer_;
archive_.writestr(constants::ArcTheme(), theme_serializer_.write_theme(workbook_.get_loaded_theme()).to_string());
xlnt::shared_strings_serializer shared_strings_serializer_;
archive_.writestr(
constants::ArcSharedString(),
xml_serializer::serialize(shared_strings_serializer_.write_shared_strings(workbook_.get_shared_strings())));
xml_serializer::serialize(xlnt::shared_strings_serializer::write_shared_strings(workbook_.get_shared_strings())));
archive_.writestr(constants::ArcWorkbook(), xml_serializer::serialize(workbook_serializer_.write_workbook()));

View File

@ -626,6 +626,30 @@ std::size_t workbook::add_style(const xlnt::style &style_)
return d_->styles_.back().id_;
}
color workbook::add_indexed_color(const color &rgb_color)
{
std::size_t index = 0;
for (auto &c : d_->colors_)
{
if (c.get_rgb_string() == rgb_color.get_rgb_string())
{
return color(color::type::indexed, index);
}
index++;
}
d_->colors_.push_back(rgb_color);
return color(color::type::indexed, index);
}
color workbook::get_indexed_color(const color &indexed_color) const
{
return d_->colors_.at(indexed_color.get_index());
}
const number_format &workbook::get_number_format(std::size_t style_id) const
{
auto number_format_id = d_->styles_[style_id].number_format_id_;
@ -820,27 +844,27 @@ std::size_t workbook::set_number_format(const xlnt::number_format &format, std::
return new_style.id_;
}
std::vector<style> workbook::get_styles() const
const std::vector<style> &workbook::get_styles() const
{
return d_->styles_;
}
std::vector<number_format> workbook::get_number_formats() const
const std::vector<number_format> &workbook::get_number_formats() const
{
return d_->number_formats_;
}
std::vector<font> workbook::get_fonts() const
const std::vector<font> &workbook::get_fonts() const
{
return d_->fonts_;
}
std::vector<border> workbook::get_borders() const
const std::vector<border> &workbook::get_borders() const
{
return d_->borders_;
}
std::vector<fill> workbook::get_fills() const
const std::vector<fill> &workbook::get_fills() const
{
return d_->fills_;
}
@ -850,12 +874,7 @@ void workbook::add_color(const color &rgb)
d_->colors_.push_back(rgb);
}
std::string workbook::get_indexed_color(std::size_t color_index) const
{
return d_->colors_.at(color_index).get_rgb_string();
}
std::vector<color> workbook::get_colors() const
const std::vector<color> &workbook::get_colors() const
{
return d_->colors_;
}