Skip to content

Commit b565755

Browse files
Performance enhancements + CSVFormat interface changes (vincentlaucsb#37)
## Public API changes * Performance increased from ~200MB/s to ~220MB/s * Made `CSVFormat` more readable and user-friendly ## Behind the scenes * Resolved vincentlaucsb#34 by storing all CSV row data in contiguous memory regions * Modified CMake to improve developer experience * Simplified CSVRow constructors/definition * Simplified CSVReader::write_record logic * Various other code clean-up actions
1 parent d52f177 commit b565755

40 files changed

+2208
-1298
lines changed

.gitignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
# Custom Settigns
2+
CMakeLists2.txt
3+
14
# Build
25
bin/
6+
build/
37

48
# Doxygen
59
docs/html
610
*.tmp
711

812
# Visual Studio
9-
Debug/
10-
Release/
1113
.vs/
1214
*.pdb
1315
*.i*

CMakeLists.txt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
cmake_minimum_required(VERSION 3.9)
2-
project(csv_parser)
2+
project(csv)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
if(CSV_CXX_STANDARD)
5+
set(CMAKE_CXX_STANDARD ${CSV_CXX_STANDARD})
6+
else()
7+
set(CMAKE_CXX_STANDARD 17)
8+
endif(CSV_CXX_STANDARD)
9+
10+
message("Building CSV library using C++${CMAKE_CXX_STANDARD}")
11+
add_compile_definitions(CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD})
512

6-
if (MSVC)
13+
if(MSVC)
714
# Make Visual Studio report accurate C++ version
815
# See: https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
916
set(CMAKE_CXX_FLAGS "/EHsc /Zc:__cplusplus")
@@ -12,24 +19,33 @@ if (MSVC)
1219
# /Wall emits warnings about the C++ standard library
1320
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
1421
endif(CMAKE_BUILD_TYPE MATCHES Debug)
15-
1622
else()
17-
set(CMAKE_CXX_FLAGS "-pthread")
18-
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
19-
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g -lgcov --coverage")
23+
# Ignore Visual Studio pragma regions
24+
set(CMAKE_CXX_FLAGS "-pthread -Wno-unknown-pragmas")
25+
if(CMAKE_BUILD_TYPE MATCHES Debug)
26+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
27+
else()
28+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og -g")
29+
endif(CMAKE_BUILD_TYPE MATCHES Debug)
2030
endif(MSVC)
2131

32+
set(CSV_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR})
33+
set(CSV_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
2234
set(CSV_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/)
2335
set(CSV_SOURCE_DIR ${CSV_INCLUDE_DIR}/internal/)
2436
set(CSV_TEST_DIR ${CMAKE_CURRENT_LIST_DIR}/tests)
2537

2638
include_directories(${CSV_INCLUDE_DIR})
2739

40+
## Load developer specific CMake settings
41+
include(CMakeLists2.txt OPTIONAL)
42+
2843
## Main Library
2944
add_subdirectory(${CSV_SOURCE_DIR})
3045

3146
## Executables
3247
add_subdirectory("programs")
3348

3449
## Tests
50+
enable_testing()
3551
add_subdirectory("tests")

CMakeSettings.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
"inheritEnvironments": [
88
"msvc_x64_x64"
99
],
10-
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
11-
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
10+
"buildRoot": "${projectDir}\\build\\${name}",
11+
"installRoot": "${projectDir}\\install\\${name}",
1212
"cmakeCommandArgs": "",
1313
"buildCommandArgs": "-v",
1414
"ctestCommandArgs": ""
@@ -20,8 +20,8 @@
2020
"inheritEnvironments": [
2121
"msvc_x64_x64"
2222
],
23-
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
24-
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
23+
"buildRoot": "${projectDir}\\build\\${name}",
24+
"installRoot": "{projectDir}\\install\\${name}",
2525
"cmakeCommandArgs": "",
2626
"buildCommandArgs": "-v",
2727
"ctestCommandArgs": ""

0 commit comments

Comments
 (0)