Vince's CSV Parser
Loading...
Searching...
No Matches
common.hpp File Reference

A standalone header file containing shared code. More...

#include <algorithm>
#include <array>
#include <cmath>
#include <cstdlib>
#include <deque>
#include <type_traits>
#include "../external/string_view.hpp"

Go to the source code of this file.

Namespaces

namespace  csv
 The all encompassing namespace.
 
namespace  csv::internals
 Stuff that is generally not of interest to end-users.
 

Macros

#define CSV_INLINE
 Helper macro which should be #defined as "inline" in the single header version.
 
#define CSV_CONST
 
#define CSV_PURE
 
#define CSV_PRIVATE
 
#define CSV_NON_NULL(...)
 
#define CSV_UNREACHABLE()   abort()
 
#define STATIC_ASSERT(x)   static_assert(x, "Assertion failed")
 
#define IF_CONSTEXPR   if
 Expands to if constexpr in C++17 and if otherwise.
 
#define CONSTEXPR_VALUE   const
 Expands to constexpr in C++17 and const otherwise.
 
#define CONSTEXPR_17   inline
 
#define CONSTEXPR_14   inline
 
#define CONSTEXPR_VALUE_14   const
 
#define CONSTEXPR   inline
 Expands to constexpr in decent compilers and inline otherwise.
 

Typedefs

using csv::string_view = nonstd::string_view
 The string_view class used by this library.
 
template<bool B, class T = void>
using csv::enable_if_t = typename std::enable_if< B, T >::type
 
template<typename F , typename... Args>
using csv::invoke_result_t = typename std::result_of< F(Args...)>::type
 
using csv::internals::ParseFlagMap = std::array< ParseFlags, 256 >
 An array which maps ASCII chars to a parsing flag.
 
using csv::internals::WhitespaceMap = std::array< bool, 256 >
 An array which maps ASCII chars to a flag indicating if it is whitespace.
 

Enumerations

enum class  csv::internals::ParseFlags {
  csv::internals::QUOTE_ESCAPE_QUOTE = 0 , csv::internals::QUOTE = 2 | 1 , csv::internals::NOT_SPECIAL = 4 , csv::internals::DELIMITER = 4 | 2 ,
  csv::internals::NEWLINE = 4 | 2 | 1
}
 An enum used for describing the significance of each character with respect to CSV parsing. More...
 

Functions

template<typename T >
bool csv::internals::is_equal (T a, T b, T epsilon=0.001)
 
constexpr ParseFlags csv::internals::quote_escape_flag (ParseFlags flag, bool quote_escape) noexcept
 Transform the ParseFlags given the context of whether or not the current field is quote escaped.
 
 csv::internals::STATIC_ASSERT (ParseFlags::DELIMITER< ParseFlags::NEWLINE)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::NOT_SPECIAL, false)==ParseFlags::NOT_SPECIAL)
 Optimizations for reducing branching in parsing loop.
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::QUOTE, false)==ParseFlags::QUOTE)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::DELIMITER, false)==ParseFlags::DELIMITER)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::NEWLINE, false)==ParseFlags::NEWLINE)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::NOT_SPECIAL, true)==ParseFlags::NOT_SPECIAL)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::QUOTE, true)==ParseFlags::QUOTE_ESCAPE_QUOTE)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::DELIMITER, true)==ParseFlags::NOT_SPECIAL)
 
 csv::internals::STATIC_ASSERT (quote_escape_flag(ParseFlags::NEWLINE, true)==ParseFlags::NOT_SPECIAL)
 

Variables

const int csv::internals::PAGE_SIZE = 4096
 Size of a memory page in bytes.
 
constexpr size_t csv::internals::ITERATION_CHUNK_SIZE = 10000000
 Chunk size for lazy-loading large CSV files.
 
constexpr int csv::CSV_NOT_FOUND = -1
 Integer indicating a requested column wasn't found.
 
constexpr unsigned csv::CHAR_OFFSET = std::numeric_limits<char>::is_signed ? 128 : 0
 Offset to convert char into array index.
 

Detailed Description

A standalone header file containing shared code.

Definition in file common.hpp.

Macro Definition Documentation

◆ CONSTEXPR

#define CONSTEXPR   inline

Expands to constexpr in decent compilers and inline otherwise.

Intended for functions and methods.

Definition at line 149 of file common.hpp.

◆ CONSTEXPR_14

#define CONSTEXPR_14   inline

Definition at line 124 of file common.hpp.

◆ CONSTEXPR_17

#define CONSTEXPR_17   inline

Definition at line 111 of file common.hpp.

◆ CONSTEXPR_VALUE

#define CONSTEXPR_VALUE   const

Expands to constexpr in C++17 and const otherwise.

Mainly used for global variables.

Definition at line 109 of file common.hpp.

◆ CONSTEXPR_VALUE_14

#define CONSTEXPR_VALUE_14   const

Definition at line 125 of file common.hpp.

◆ CSV_CONST

#define CSV_CONST

Definition at line 43 of file common.hpp.

◆ CSV_INLINE

#define CSV_INLINE

Helper macro which should be #defined as "inline" in the single header version.

Definition at line 26 of file common.hpp.

◆ CSV_NON_NULL

#define CSV_NON_NULL (   ...)

Definition at line 46 of file common.hpp.

◆ CSV_PRIVATE

#define CSV_PRIVATE

Definition at line 45 of file common.hpp.

◆ CSV_PURE

#define CSV_PURE

Definition at line 44 of file common.hpp.

◆ CSV_UNREACHABLE

#define CSV_UNREACHABLE ( )    abort()

Definition at line 54 of file common.hpp.

◆ IF_CONSTEXPR

#define IF_CONSTEXPR   if

Expands to if constexpr in C++17 and if otherwise.

Definition at line 108 of file common.hpp.

◆ STATIC_ASSERT

#define STATIC_ASSERT (   x)    static_assert(x, "Assertion failed")

Definition at line 74 of file common.hpp.