Skip to content

Commit febef56

Browse files
authored
Source File Breakout (#74)
* adding source files instead of header only to allow for export 3rd party libraries * fixing the CI and coverage * turning off gcov and clang-formatting for csv.hpp amalgamation file
1 parent 1f2375c commit febef56

24 files changed

Lines changed: 814 additions & 365 deletions

.github/workflows/coverage.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ jobs:
4646
gtest/*
4747
googletest/*
4848
build/*
49+
tests/*
4950
fail-under-line: 80
5051
html-out: coverage.html
5152
html-details: true

CMakeLists.txt

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,32 +61,82 @@ endif()
6161
# ---------------------------------------------------------------------------------------
6262
# Build the library
6363
# ---------------------------------------------------------------------------------------
64-
add_library(datamanagement INTERFACE)
64+
set(DATAMANAGEMENT_SRCS
65+
src/modeldata/model_data.cpp
66+
src/source/csv_source.cpp
67+
src/source/db_source.cpp
68+
src/utils/logging.cpp
69+
)
70+
71+
if(DATAMANAGEMENT_BUILD_SHARED_LIBS)
72+
if(WIN32)
73+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY)
74+
list(APPEND DATAMANAGEMENT_SRCS ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
75+
endif()
76+
add_library(datamanagement SHARED ${DATAMANAGEMENT_SRCS} ${DATAMANAGEMENT_ALL_HEADERS})
77+
target_compile_definitions(datamanagement PUBLIC DATAMANAGEMENT_SHARED_LIB)
78+
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
79+
target_compile_options(datamanagement PUBLIC $<$<AND:$<CXX_COMPILER_ID:MSVC>,$<NOT:$<COMPILE_LANGUAGE:CUDA>>>:/wd4251
80+
/wd4275>)
81+
endif()
82+
else()
83+
add_library(datamanagement STATIC ${DATAMANAGEMENT_SRCS} ${DATAMANAGEMENT_ALL_HEADERS})
84+
endif()
85+
86+
# ---------------------------------------------------------------------------------------
87+
# Alias for importing
88+
# ---------------------------------------------------------------------------------------
6589
add_library(datamanagement::datamanagement ALIAS datamanagement)
6690

91+
set(DATAMANAGEMENT_INCLUDES_LEVEL "")
92+
if(DATAMANAGEMENT_SYSTEM_INCLUDES)
93+
set(DATAMANAGEMENT_INCLUDES_LEVEL "SYSTEM")
94+
endif()
95+
96+
target_compile_definitions(datamanagement PUBLIC DATAMANAGEMENT_COMPILED_LIB)
97+
target_include_directories(datamanagement ${DATAMANAGEMENT_INCLUDES_LEVEL} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
98+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
99+
PRIVATE "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>")
100+
67101
option(BUILD_TESTS "enable datamanagement unit tests" OFF)
68102
if (NOT BUILD_TESTS STREQUAL OFF)
69103
add_subdirectory(tests)
70104
endif()
71105

72-
target_include_directories(${PROJECT_NAME}
73-
INTERFACE
74-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
75-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
106+
target_compile_definitions(datamanagement PUBLIC DATAMANAGEMENT_COMPILED_LIB)
107+
target_include_directories(datamanagement ${DATAMANAGEMENT_INCLUDES_LEVEL}
108+
PUBLIC
109+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
110+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
111+
PRIVATE
112+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>"
76113
)
77114

78115
# ---------------------------------------------------------------------------------------
79116
# Link Dependencies
80117
# ---------------------------------------------------------------------------------------
81118
include(cmake/MakeDependenciesAvailable.cmake)
82119

83-
target_link_libraries(${PROJECT_NAME}
84-
INTERFACE
85-
SQLiteCpp
86-
Boost::boost
87-
spdlog::spdlog
88-
Eigen3::Eigen
89-
)
120+
if (DATAMANAGEMENT_CALCULATE_COVERAGE)
121+
target_link_libraries(datamanagement
122+
PUBLIC
123+
SQLiteCpp
124+
Eigen3::Eigen
125+
PRIVATE
126+
spdlog::spdlog
127+
Boost::boost
128+
gcov
129+
)
130+
else()
131+
target_link_libraries(datamanagement
132+
PUBLIC
133+
SQLiteCpp
134+
Eigen3::Eigen
135+
PRIVATE
136+
spdlog::spdlog
137+
Boost::boost
138+
)
139+
endif()
90140

91141
set_target_properties(datamanagement PROPERTIES VERSION ${DATAMANAGEMENT_VERSION} SOVERSION ${DATAMANAGEMENT_VERSION_MAJOR}.${DATAMANAGEMENT_VERSION_MINOR})
92142

cmake/LoadEigen.cmake

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,16 @@ message(CHECK_START "Fetching Eigen3...")
33
list(APPEND CMAKE_MESSAGE_INDENT " ")
44

55
FetchContent_Declare(
6-
Eigen
6+
Eigen3
77
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
8-
GIT_TAG master
9-
GIT_SHALLOW TRUE
10-
GIT_PROGRESS TRUE
8+
GIT_TAG "3.4.0"
119
FIND_PACKAGE_ARGS NAMES Eigen3
1210
)
13-
# note: To disable eigen tests,
14-
# you should put this code in a add_subdirectory to avoid to change
15-
# BUILD_TESTING for your own project too since variables are directory
16-
# scoped
17-
set(BUILD_TESTING OFF)
11+
12+
# Turn off Eigen Testing and Docs
1813
set(EIGEN_BUILD_TESTING OFF)
19-
set(EIGEN_MPL2_ONLY ON)
20-
set(EIGEN_BUILD_PKGCONFIG OFF)
2114
set(EIGEN_BUILD_DOC OFF)
15+
set(EIGEN_MPL2_ONLY ON)
16+
2217
list(POP_BACK CMAKE_MESSAGE_INDENT)
2318
message(CHECK_PASS "Eigen3 Fetched")

cmake/LoadSpdlog.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ FetchContent_Declare(
66
GIT_TAG v1.x
77
GIT_PROGRESS TRUE
88
)
9+
set(SPDLOG_INSTALL ON)
910
list(POP_BACK CMAKE_MESSAGE_INDENT)
1011
message(CHECK_PASS "spdlog Fetched")

cmake/MakeDependenciesAvailable.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ include(cmake/LoadEigen.cmake)
88
include(cmake/LoadSpdlog.cmake)
99

1010
if(DATAMANAGEMENT_BUILD_TESTS STREQUAL "OFF")
11-
FetchContent_MakeAvailable(Eigen SQLiteCpp Boost spdlog)
11+
FetchContent_MakeAvailable(Eigen3 SQLiteCpp Boost spdlog)
1212
elseif(DATAMANAGEMENT_BUILD_TESTS STREQUAL "ON")
1313
include(cmake/LoadGtest.cmake)
14-
FetchContent_MakeAvailable(Eigen SQLiteCpp Boost spdlog googletest)
14+
FetchContent_MakeAvailable(Eigen3 SQLiteCpp Boost spdlog googletest)
1515
include(GoogleTest)
1616
endif()

cmake/datamanagement.pc.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ Description: Syndemics Data Management
88
URL: https://github.com/SyndemicsLab
99
Version: @DATAMANAGEMENT_VERSION@
1010
CFlags: -I${includedir} @PKG_CONFIG_DEFINES@
11-
Libs: -L${libdir} -lspdlog -lboost
11+
Libs: -L${libdir} -lspdlog -lboost -libeigen -libsqlitecpp
1212
Requires: @PKG_CONFIG_REQUIRES@

include/datamanagement/datamanagement.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created Date: Th Feb 2025 //
55
// Author: Matthew Carroll //
66
// ----- //
7-
// Last Modified: Thu Feb 20 2025 //
7+
// Last Modified: 2025-05-01 //
88
// Modified By: Matthew Carroll //
99
// ----- //
1010
// Copyright (c) 2025 Syndemics Lab at Boston Medical Center //
@@ -18,7 +18,6 @@
1818
#define DATAMANAGEMENT_DATAMANAGEMENT_HPP_
1919

2020
#include <datamanagement/modeldata/model_data.hpp>
21-
#include <datamanagement/source/config.hpp>
2221
#include <datamanagement/source/csv_source.hpp>
2322
#include <datamanagement/source/db_source.hpp>
2423

include/datamanagement/modeldata/model_data.hpp

Lines changed: 14 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created Date: Th Feb 2025 //
55
// Author: Matthew Carroll //
66
// ----- //
7-
// Last Modified: 2025-04-30 //
7+
// Last Modified: 2025-05-01 //
88
// Modified By: Matthew Carroll //
99
// ----- //
1010
// Copyright (c) 2025 Syndemics Lab at Boston Medical Center //
@@ -17,66 +17,33 @@
1717
#ifndef DATAMANAGEMENT_MODELDATA_MODELDATA_HPP_
1818
#define DATAMANAGEMENT_MODELDATA_MODELDATA_HPP_
1919

20-
#include <filesystem>
2120
#include <memory>
2221
#include <string>
2322
#include <vector>
2423

25-
#include <datamanagement/source/config.hpp>
2624
#include <datamanagement/source/csv_source.hpp>
2725
#include <datamanagement/source/db_source.hpp>
2826

2927
namespace datamanagement {
3028
class ModelData {
31-
private:
32-
datamanagement::source::Config config;
33-
std::unordered_map<std::string, datamanagement::source::CSVSource>
34-
_csv_sources = {};
35-
std::unordered_map<std::string, datamanagement::source::DBSource>
36-
_db_sources = {};
37-
3829
public:
39-
ModelData(const std::string &cfgfile) : config(cfgfile) {}
40-
~ModelData() = default;
41-
datamanagement::source::Config GetConfig() const { return config; }
30+
virtual ~ModelData() = default;
31+
virtual std::string GetFromConfig(const std::string &key) const = 0;
32+
33+
virtual std::vector<std::string>
34+
GetConfigSectionCategories(const std::string &section) const = 0;
35+
36+
virtual void AddSource(const std::string &path) = 0;
4237

43-
void AddSource(const std::string &path) {
44-
std::filesystem::path p = path;
45-
if (p.extension() == ".csv") {
46-
datamanagement::source::CSVSource s;
47-
_csv_sources[p.stem()] = std::move(s);
48-
_csv_sources[p.stem()].ConnectToFile(path);
49-
} else if (p.extension() == ".db") {
50-
datamanagement::source::DBSource s;
51-
_db_sources[p.stem()] = std::move(s);
52-
_db_sources[p.stem()].SetDatabasePath(path);
53-
} else {
54-
// Not a valid source file
55-
}
56-
}
38+
virtual std::vector<std::string> GetCSVSourceNames() const = 0;
39+
virtual std::vector<std::string> GetDBSourceNames() const = 0;
5740

58-
std::vector<std::string> GetCSVSourceNames() const {
59-
std::vector<std::string> names = {};
60-
for (const auto &[k, v] : _csv_sources) {
61-
names.push_back(k);
62-
}
63-
return names;
64-
}
65-
std::vector<std::string> GetDBSourceNames() const {
66-
std::vector<std::string> names = {};
67-
for (const auto &[k, v] : _db_sources) {
68-
names.push_back(k);
69-
}
70-
return names;
71-
}
41+
virtual source::CSVSource &GetCSVSource(const std::string &name) = 0;
7242

73-
datamanagement::source::CSVSource &GetCSVSource(const std::string &name) {
74-
return _csv_sources[name];
75-
}
43+
virtual source::DBSource &GetDBSource(const std::string &name) = 0;
7644

77-
datamanagement::source::DBSource &GetDBSource(const std::string &name) {
78-
return _db_sources[name];
79-
}
45+
static std::unique_ptr<ModelData>
46+
Create(const std::string &config, const std::string &log_name = "console");
8047
};
8148
} // namespace datamanagement
8249

include/datamanagement/source/config.hpp

Lines changed: 0 additions & 55 deletions
This file was deleted.

0 commit comments

Comments
 (0)