KiCad PCB EDA Suite
STRING_LINE_READER Class Reference

STRING_LINE_READER is a LINE_READER that reads from a multiline 8 bit wide std::string. More...

#include <richio.h>

Inheritance diagram for STRING_LINE_READER:
LINE_READER

Public Member Functions

 STRING_LINE_READER (const std::string &aString, const wxString &aSource)
 Constructor STRING_LINE_READER( const std::string&, const wxString& ) More...
 
 STRING_LINE_READER (const STRING_LINE_READER &aStartingPoint)
 Constructor STRING_LINE_READER( const STRING_LINE_READER& ) allows for a continuation of the reading of a stream started by another STRING_LINE_READER. More...
 
char * ReadLine () override
 Function ReadLine reads a line of text into the buffer and increments the line number counter. More...
 
virtual const wxString & GetSource () const
 Function GetSource returns the name of the source of the lines in an abstract sense. More...
 
char * Line () const
 Function Line returns a pointer to the last line that was read in. More...
 
 operator char * () const
 Operator char* is a casting operator that returns a char* pointer to the start of the line buffer. More...
 
virtual unsigned LineNumber () const
 Function Line Number returns the line number of the last line read from this LINE_READER. More...
 
unsigned Length () const
 Function Length returns the number of bytes in the last line read from this LINE_READER. More...
 

Protected Member Functions

void expandCapacity (unsigned aNewsize)
 Function expandCapacity will expand the capacity of line up to maxLineLength but not greater, so be careful about making assumptions of capacity after calling this. More...
 

Protected Attributes

std::string m_lines
 
size_t m_ndx
 
unsigned m_length
 no. bytes in line before trailing nul. More...
 
unsigned m_lineNum
 
char * m_line
 the read line of UTF8 text More...
 
unsigned m_capacity
 no. bytes allocated for line. More...
 
unsigned m_maxLineLength
 maximum allowed capacity using resizing. More...
 
wxString m_source
 origin of text lines, e.g. filename or "clipboard" More...
 

Detailed Description

STRING_LINE_READER is a LINE_READER that reads from a multiline 8 bit wide std::string.

Definition at line 255 of file richio.h.

Constructor & Destructor Documentation

◆ STRING_LINE_READER() [1/2]

STRING_LINE_READER::STRING_LINE_READER ( const std::string &  aString,
const wxString &  aSource 
)

Constructor STRING_LINE_READER( const std::string&, const wxString& )

Parameters
aStringis a source string consisting of one or more lines of text, where multiple lines are separated with a '
' character. The last line does not necessarily need a trailing '
'.
aSourcedescribes the source of aString for error reporting purposes can be anything meaninful, such as wxT( "clipboard" ).

Definition at line 232 of file richio.cpp.

232  :
234  m_lines( aString ), m_ndx( 0 )
235 {
236  // Clipboard text should be nice and _use multiple lines_ so that
237  // we can report _line number_ oriented error messages when parsing.
238  m_source = aSource;
239 }
#define LINE_READER_LINE_DEFAULT_MAX
Definition: richio.h:74
LINE_READER(unsigned aMaxLineLength=LINE_READER_LINE_DEFAULT_MAX)
Constructor LINE_READER builds a line reader and fixes the length of the maximum supported line lengt...
Definition: richio.cpp:106
wxString m_source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:93
std::string m_lines
Definition: richio.h:258

References LINE_READER::m_source.

◆ STRING_LINE_READER() [2/2]

STRING_LINE_READER::STRING_LINE_READER ( const STRING_LINE_READER aStartingPoint)

Constructor STRING_LINE_READER( const STRING_LINE_READER& ) allows for a continuation of the reading of a stream started by another STRING_LINE_READER.

Any stream offset and source name are used from aStartingPoint.

Definition at line 242 of file richio.cpp.

242  :
244  m_lines( aStartingPoint.m_lines ),
245  m_ndx( aStartingPoint.m_ndx )
246 {
247  // since we are keeping the same "source" name, for error reporting purposes
248  // we need to have the same notion of line number and offset.
249 
250  m_source = aStartingPoint.m_source;
251  m_lineNum = aStartingPoint.m_lineNum;
252 }
unsigned m_lineNum
Definition: richio.h:86
#define LINE_READER_LINE_DEFAULT_MAX
Definition: richio.h:74
LINE_READER(unsigned aMaxLineLength=LINE_READER_LINE_DEFAULT_MAX)
Constructor LINE_READER builds a line reader and fixes the length of the maximum supported line lengt...
Definition: richio.cpp:106
wxString m_source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:93
std::string m_lines
Definition: richio.h:258

References LINE_READER::m_lineNum, and LINE_READER::m_source.

Member Function Documentation

◆ expandCapacity()

void LINE_READER::expandCapacity ( unsigned  aNewsize)
protectedinherited

Function expandCapacity will expand the capacity of line up to maxLineLength but not greater, so be careful about making assumptions of capacity after calling this.

Definition at line 135 of file richio.cpp.

136 {
137  // m_length can equal maxLineLength and nothing breaks, there's room for
138  // the terminating nul. cannot go over this.
139  if( aNewsize > m_maxLineLength+1 )
140  aNewsize = m_maxLineLength+1;
141 
142  if( aNewsize > m_capacity )
143  {
144  m_capacity = aNewsize;
145 
146  // resize the buffer, and copy the original data
147  // Be sure there is room for the null EOL char, so reserve capacity+1 bytes
148  // to ensure capacity line lenght. Use capacity+5 to cover and corner case
149  char* bigger = new char[m_capacity+5];
150 
151  wxASSERT( m_capacity >= m_length+1 );
152 
153  memcpy( bigger, m_line, m_length );
154  bigger[m_length] = 0;
155 
156  delete[] m_line;
157  m_line = bigger;
158  }
159 }
char * m_line
the read line of UTF8 text
Definition: richio.h:88
unsigned m_capacity
no. bytes allocated for line.
Definition: richio.h:89
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:85
unsigned m_maxLineLength
maximum allowed capacity using resizing.
Definition: richio.h:91

References LINE_READER::m_capacity, LINE_READER::m_length, LINE_READER::m_line, and LINE_READER::m_maxLineLength.

Referenced by FILE_LINE_READER::ReadLine(), ReadLine(), and INPUTSTREAM_LINE_READER::ReadLine().

◆ GetSource()

virtual const wxString& LINE_READER::GetSource ( ) const
inlinevirtualinherited

Function GetSource returns the name of the source of the lines in an abstract sense.

This may be a file or it may be the clipboard or any other source of lines of text. The returned string is useful for reporting error messages.

Reimplemented in WHITESPACE_FILTER_READER, and FILTER_READER.

Definition at line 131 of file richio.h.

132  {
133  return m_source;
134  }
wxString m_source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:93

References LINE_READER::m_source.

Referenced by LEGACY_PLUGIN::biuParse(), LEGACY_PLUGIN::checkVersion(), DSNLEXER::CurSource(), LEGACY_PLUGIN::degParse(), WRLPROC::GetFileName(), FILTER_READER::GetSource(), WHITESPACE_FILTER_READER::GetSource(), CMP_READER::Load(), SCH_LEGACY_PLUGIN::loadComponent(), LEGACY_NETLIST_READER::loadComponent(), LEGACY_NETLIST_READER::loadFootprintFilters(), LEGACY_NETLIST_READER::loadNet(), SCH_LEGACY_PLUGIN_CACHE::LoadPart(), SCH_LEGACY_PLUGIN_CACHE::loadPin(), LEGACY_PLUGIN::loadSETUP(), GPCB_FPL_CACHE::parseMODULE(), KICAD_NETLIST_PARSER::parseNet(), and WRLPROC::WRLPROC().

◆ Length()

unsigned LINE_READER::Length ( ) const
inlineinherited

Function Length returns the number of bytes in the last line read from this LINE_READER.

Definition at line 169 of file richio.h.

170  {
171  return m_length;
172  }
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:85

References LINE_READER::m_length.

Referenced by LEGACY_NETLIST_READER::loadComponent(), LEGACY_NETLIST_READER::loadFootprintFilters(), LEGACY_NETLIST_READER::loadNet(), KICAD_NETLIST_PARSER::parseNet(), FILTER_READER::ReadLine(), WHITESPACE_FILTER_READER::ReadLine(), and DSNLEXER::readLine().

◆ Line()

char* LINE_READER::Line ( ) const
inlineinherited

Function Line returns a pointer to the last line that was read in.

Definition at line 140 of file richio.h.

141  {
142  return m_line;
143  }
char * m_line
the read line of UTF8 text
Definition: richio.h:88

References LINE_READER::m_line.

Referenced by LEGACY_PLUGIN::biuParse(), LEGACY_PLUGIN::checkVersion(), LEGACY_PLUGIN::degParse(), NETLIST_READER::GuessNetlistFileType(), CMP_READER::Load(), SCH_LEGACY_PLUGIN_CACHE::loadAliases(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), SCH_LEGACY_PLUGIN_CACHE::loadBezier(), SCH_LEGACY_PLUGIN::loadBitmap(), SCH_LEGACY_PLUGIN::loadBusAlias(), SCH_LEGACY_PLUGIN::loadBusEntry(), SCH_LEGACY_PLUGIN_CACHE::loadCircle(), SCH_LEGACY_PLUGIN::loadComponent(), SCH_LEGACY_PLUGIN::LoadContent(), BITMAP_BASE::LoadData(), SCH_LEGACY_PLUGIN_CACHE::loadDrawEntries(), SCH_LEGACY_PLUGIN_CACHE::loadField(), SCH_LEGACY_PLUGIN::loadFile(), EXCELLON_IMAGE::LoadFile(), SCH_LEGACY_PLUGIN_CACHE::loadFootprintFilters(), SCH_LEGACY_PLUGIN::loadHeader(), SCH_LEGACY_PLUGIN_CACHE::loadHeader(), SCH_LEGACY_PLUGIN::loadJunction(), LEGACY_PLUGIN::loadMODULE_EDGE(), LEGACY_PLUGIN::loadMODULE_TEXT(), LP_CACHE::LoadModules(), LEGACY_NETLIST_READER::LoadNetlist(), SCH_LEGACY_PLUGIN::loadNoConnect(), SCH_LEGACY_PLUGIN::loadPageSettings(), SCH_LEGACY_PLUGIN_CACHE::LoadPart(), SCH_LEGACY_PLUGIN_CACHE::loadPin(), SCH_LEGACY_PLUGIN_CACHE::loadPolyLine(), SCH_LEGACY_PLUGIN_CACHE::loadRectangle(), SCH_LEGACY_PLUGIN::loadText(), SCH_LEGACY_PLUGIN_CACHE::loadText(), LEGACY_PLUGIN::loadTrackList(), SCH_LEGACY_PLUGIN::loadWire(), LINE_READER::operator char *(), KICAD_NETLIST_PARSER::parseNet(), GPCB_FPL_CACHE::parseParameters(), DSNLEXER::PopReader(), SCH_EDITOR_CONTROL::processCmpToFootprintLinkFile(), MWAVE_POLYGONAL_SHAPE_DLG::ReadDataShapeDescr(), FILTER_READER::ReadLine(), DSNLEXER::readLine(), and LP_CACHE::SkipIndex().

◆ LineNumber()

◆ operator char *()

LINE_READER::operator char * ( ) const
inlineinherited

Operator char* is a casting operator that returns a char* pointer to the start of the line buffer.

Definition at line 150 of file richio.h.

151  {
152  return Line();
153  }
char * Line() const
Function Line returns a pointer to the last line that was read in.
Definition: richio.h:140

References LINE_READER::Line().

◆ ReadLine()

char * STRING_LINE_READER::ReadLine ( )
overridevirtual

Function ReadLine reads a line of text into the buffer and increments the line number counter.

If the line is larger than aMaxLineLength passed to the constructor, then an exception is thrown. The line is nul terminated.

Returns
char* - The beginning of the read line, or NULL if EOF.
Exceptions
IO_ERRORwhen a line is too long.

Implements LINE_READER.

Definition at line 255 of file richio.cpp.

256 {
257  size_t nlOffset = m_lines.find( '\n', m_ndx );
258 
259  if( nlOffset == std::string::npos )
260  m_length = m_lines.length() - m_ndx;
261  else
262  m_length = nlOffset - m_ndx + 1; // include the newline, so +1
263 
264  if( m_length )
265  {
266  if( m_length >= m_maxLineLength )
267  THROW_IO_ERROR( _("Line length exceeded") );
268 
269  if( m_length+1 > m_capacity ) // +1 for terminating nul
271 
272  wxASSERT( m_ndx + m_length <= m_lines.length() );
273 
274  memcpy( m_line, &m_lines[m_ndx], m_length );
275  m_ndx += m_length;
276  }
277 
278  ++m_lineNum; // this gets incremented even if no bytes were read
279  m_line[m_length] = 0;
280 
281  return m_length ? m_line : NULL;
282 }
char * m_line
the read line of UTF8 text
Definition: richio.h:88
unsigned m_lineNum
Definition: richio.h:86
#define NULL
unsigned m_capacity
no. bytes allocated for line.
Definition: richio.h:89
void expandCapacity(unsigned aNewsize)
Function expandCapacity will expand the capacity of line up to maxLineLength but not greater,...
Definition: richio.cpp:135
#define _(s)
Definition: 3d_actions.cpp:33
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:85
std::string m_lines
Definition: richio.h:258
#define THROW_IO_ERROR(msg)
Definition: ki_exception.h:38
unsigned m_maxLineLength
maximum allowed capacity using resizing.
Definition: richio.h:91

References _, LINE_READER::expandCapacity(), LINE_READER::m_capacity, LINE_READER::m_length, LINE_READER::m_line, LINE_READER::m_lineNum, m_lines, LINE_READER::m_maxLineLength, m_ndx, NULL, and THROW_IO_ERROR.

Member Data Documentation

◆ m_capacity

unsigned LINE_READER::m_capacity
protectedinherited

◆ m_length

unsigned LINE_READER::m_length
protectedinherited

◆ m_line

◆ m_lineNum

◆ m_lines

std::string STRING_LINE_READER::m_lines
protected

Definition at line 258 of file richio.h.

Referenced by ReadLine().

◆ m_maxLineLength

unsigned LINE_READER::m_maxLineLength
protectedinherited

maximum allowed capacity using resizing.

Definition at line 91 of file richio.h.

Referenced by LINE_READER::expandCapacity(), FILE_LINE_READER::ReadLine(), ReadLine(), and INPUTSTREAM_LINE_READER::ReadLine().

◆ m_ndx

size_t STRING_LINE_READER::m_ndx
protected

Definition at line 259 of file richio.h.

Referenced by ReadLine().

◆ m_source

wxString LINE_READER::m_source
protectedinherited

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