Minsky
escapedListSeparator::EscapedListSeparator< Char, Traits > Class Template Reference
Collaboration diagram for escapedListSeparator::EscapedListSeparator< Char, Traits >:
Collaboration graph

Classes

struct  char_eq
 

Public Member Functions

 EscapedListSeparator (Char e='\\', Char c=',', Char q='\"')
 
 EscapedListSeparator (string_type e, string_type c, string_type q)
 
void reset ()
 
template<typename InputIterator , typename Token >
bool operator() (InputIterator &next, InputIterator end, Token &tok)
 

Private Types

typedef std::basic_string< Char, Traits > string_type
 

Private Member Functions

bool is_escape (Char e)
 
bool is_c (Char e)
 
bool is_quote (Char e)
 
template<typename iterator , typename Token >
void do_escape (iterator &next, iterator end, Token &tok)
 

Private Attributes

string_type escape_
 
string_type c_
 
string_type quote_
 
bool last_
 

Detailed Description

template<class Char, class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
class escapedListSeparator::EscapedListSeparator< Char, Traits >

Definition at line 50 of file CSVParser.cc.

Member Typedef Documentation

◆ string_type

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
typedef std::basic_string<Char,Traits> escapedListSeparator::EscapedListSeparator< Char, Traits >::string_type
private

Definition at line 53 of file CSVParser.cc.

Constructor & Destructor Documentation

◆ EscapedListSeparator() [1/2]

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
escapedListSeparator::EscapedListSeparator< Char, Traits >::EscapedListSeparator ( Char  e = '\\',
Char  c = ',',
Char  q = '\"' 
)
inlineexplicit

◆ EscapedListSeparator() [2/2]

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
escapedListSeparator::EscapedListSeparator< Char, Traits >::EscapedListSeparator ( string_type  e,
string_type  c,
string_type  q 
)
inline

Member Function Documentation

◆ do_escape()

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
template<typename iterator , typename Token >
void escapedListSeparator::EscapedListSeparator< Char, Traits >::do_escape ( iterator &  next,
iterator  end,
Token &  tok 
)
inlineprivate

Definition at line 79 of file CSVParser.cc.

79  {
80  if (++next >= end)
81  // don't throw, but pass on verbatim
82  tok+=escape_.front();
83  if (Traits::eq(*next,'n')) {
84  tok+='\n';
85  return;
86  }
87  if (is_quote(*next)) {
88  tok+=*next;
89  return;
90  }
91  if (is_c(*next)) {
92  tok+=*next;
93  return;
94  }
95  if (is_escape(*next)) {
96  tok+=*next;
97  return;
98  }
99  // don't throw, but pass on verbatim
100  tok+=escape_.front()+*next;
101  }

◆ is_c()

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
bool escapedListSeparator::EscapedListSeparator< Char, Traits >::is_c ( Char  e)
inlineprivate

Definition at line 70 of file CSVParser.cc.

References f.

70  {
71  const char_eq f(e);
72  return std::find_if(c_.begin(),c_.end(),f)!=c_.end();
73  }
function f
Definition: canvas.m:1

◆ is_escape()

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
bool escapedListSeparator::EscapedListSeparator< Char, Traits >::is_escape ( Char  e)
inlineprivate

Definition at line 66 of file CSVParser.cc.

References f.

66  {
67  const char_eq f(e);
68  return std::find_if(escape_.begin(),escape_.end(),f)!=escape_.end();
69  }
function f
Definition: canvas.m:1

◆ is_quote()

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
bool escapedListSeparator::EscapedListSeparator< Char, Traits >::is_quote ( Char  e)
inlineprivate

Definition at line 74 of file CSVParser.cc.

References f.

74  {
75  const char_eq f(e);
76  return std::find_if(quote_.begin(),quote_.end(),f)!=quote_.end();
77  }
function f
Definition: canvas.m:1

◆ operator()()

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
template<typename InputIterator , typename Token >
bool escapedListSeparator::EscapedListSeparator< Char, Traits >::operator() ( InputIterator &  next,
InputIterator  end,
Token &  tok 
)
inline

Definition at line 115 of file CSVParser.cc.

115  {
116  bool bInQuote = false;
117  tok = Token();
118 
119  if (next >= end) {
120  next=end; // reset next in case it has adavanced beyond
121  if (last_) {
122  last_ = false;
123  return true;
124  }
125  return false;
126  }
127  last_ = false;
128  while (next < end) {
129  if (is_escape(*next)) {
130  do_escape(next,end,tok);
131  }
132  else if (is_c(*next)) {
133  if (!bInQuote) {
134  // If we are not in quote, then we are done
135  ++next;
136  // The last character was a c, that means there is
137  // 1 more blank field
138  last_ = true;
139  return true;
140  }
141  tok+=*next;
142  }
143  else if (is_quote(*next)) {
144  bInQuote=!bInQuote;
145  }
146  else {
147  tok += *next;
148  }
149  ++next;
150  }
151  return true;
152  }
void do_escape(iterator &next, iterator end, Token &tok)
Definition: CSVParser.cc:79

◆ reset()

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
void escapedListSeparator::EscapedListSeparator< Char, Traits >::reset ( )
inline

Definition at line 112 of file CSVParser.cc.

Member Data Documentation

◆ c_

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
string_type escapedListSeparator::EscapedListSeparator< Char, Traits >::c_
private

Definition at line 62 of file CSVParser.cc.

◆ escape_

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
string_type escapedListSeparator::EscapedListSeparator< Char, Traits >::escape_
private

Definition at line 61 of file CSVParser.cc.

◆ last_

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
bool escapedListSeparator::EscapedListSeparator< Char, Traits >::last_
private

Definition at line 64 of file CSVParser.cc.

◆ quote_

template<class Char , class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type>
string_type escapedListSeparator::EscapedListSeparator< Char, Traits >::quote_
private

Definition at line 63 of file CSVParser.cc.


The documentation for this class was generated from the following file: