KiCad PCB EDA Suite
STRING_LINE_READER Class Reference

Class 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 newsize)
 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 lines
 
size_t ndx
 
unsigned length
 no. bytes in line before trailing nul. More...
 
unsigned lineNum
 
char * line
 the read line of UTF8 text More...
 
unsigned capacity
 no. bytes allocated for line. More...
 
unsigned maxLineLength
 maximum allowed capacity using resizing. More...
 
wxString source
 origin of text lines, e.g. filename or "clipboard" More...
 

Detailed Description

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

Definition at line 254 of file richio.h.

Constructor & Destructor Documentation

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 229 of file richio.cpp.

References LINE_READER::source.

229  :
231  lines( aString ),
232  ndx( 0 )
233 {
234  // Clipboard text should be nice and _use multiple lines_ so that
235  // we can report _line number_ oriented error messages when parsing.
236  source = aSource;
237 }
std::string lines
Definition: richio.h:257
#define LINE_READER_LINE_DEFAULT_MAX
Definition: richio.h:73
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:103
wxString source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:92
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 240 of file richio.cpp.

References LINE_READER::lineNum, and LINE_READER::source.

240  :
242  lines( aStartingPoint.lines ),
243  ndx( aStartingPoint.ndx )
244 {
245  // since we are keeping the same "source" name, for error reporting purposes
246  // we need to have the same notion of line number and offset.
247 
248  source = aStartingPoint.source;
249  lineNum = aStartingPoint.lineNum;
250 }
std::string lines
Definition: richio.h:257
unsigned lineNum
Definition: richio.h:85
#define LINE_READER_LINE_DEFAULT_MAX
Definition: richio.h:73
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:103
wxString source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:92

Member Function Documentation

void LINE_READER::expandCapacity ( unsigned  newsize)
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 132 of file richio.cpp.

References LINE_READER::capacity, LINE_READER::length, LINE_READER::line, and LINE_READER::maxLineLength.

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

133 {
134  // length can equal maxLineLength and nothing breaks, there's room for
135  // the terminating nul. cannot go over this.
136  if( newsize > maxLineLength+1 )
137  newsize = maxLineLength+1;
138 
139  if( newsize > capacity )
140  {
141  capacity = newsize;
142 
143  // resize the buffer, and copy the original data
144  char* bigger = new char[capacity];
145 
146  wxASSERT( capacity >= length+1 );
147 
148  memcpy( bigger, line, length );
149  bigger[length] = 0;
150 
151  delete[] line;
152  line = bigger;
153  }
154 }
unsigned maxLineLength
maximum allowed capacity using resizing.
Definition: richio.h:90
char * line
the read line of UTF8 text
Definition: richio.h:87
unsigned length
no. bytes in line before trailing nul.
Definition: richio.h:84
unsigned capacity
no. bytes allocated for line.
Definition: richio.h:88
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 130 of file richio.h.

References LINE_READER::source.

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

131  {
132  return source;
133  }
wxString source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:92
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 168 of file richio.h.

References LINE_READER::length.

Referenced by LIB_FIELD::Load(), 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().

169  {
170  return length;
171  }
unsigned length
no. bytes in line before trailing nul.
Definition: richio.h:84
char* LINE_READER::Line ( ) const
inlineinherited

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

Definition at line 139 of file richio.h.

References LINE_READER::line.

Referenced by LEGACY_PLUGIN::biuParse(), LEGACY_PLUGIN::checkVersion(), LEGACY_PLUGIN::degParse(), NETLIST_READER::GuessNetlistFileType(), CMP_READER::Load(), SCH_BITMAP::Load(), LIB_PIN::Load(), SCH_SHEET_PIN::Load(), SCH_COMPONENT::Load(), LIB_PART::Load(), SCH_LEGACY_PLUGIN_CACHE::loadAliases(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), SCH_LEGACY_PLUGIN_CACHE::loadBezier(), SCH_LEGACY_PLUGIN::loadBitmap(), SCH_LEGACY_PLUGIN::loadBusEntry(), SCH_LEGACY_PLUGIN_CACHE::loadCircle(), SCH_LEGACY_PLUGIN::loadComponent(), BITMAP_BASE::LoadData(), SCH_LEGACY_PLUGIN_CACHE::loadDrawEntries(), SCH_LEGACY_PLUGIN_CACHE::loadField(), EXCELLON_IMAGE::LoadFile(), SCH_LEGACY_PLUGIN::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_EDIT_FRAME::LoadOneEEFile(), 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_EDIT_FRAME::ProcessCmpToFootprintLinkFile(), MWAVE_POLYGONAL_SHAPE_DLG::ReadDataShapeDescr(), FILTER_READER::ReadLine(), DSNLEXER::readLine(), ReadSchemaDescr(), and LP_CACHE::SkipIndex().

140  {
141  return line;
142  }
char * line
the read line of UTF8 text
Definition: richio.h:87
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 149 of file richio.h.

References LINE_READER::Line().

150  {
151  return Line();
152  }
char * Line() const
Function Line returns a pointer to the last line that was read in.
Definition: richio.h:139
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 253 of file richio.cpp.

References LINE_READER::capacity, LINE_READER::expandCapacity(), LINE_READER::length, LINE_READER::line, LINE_READER::lineNum, lines, LINE_READER::maxLineLength, ndx, and THROW_IO_ERROR.

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

Member Data Documentation

unsigned LINE_READER::capacity
protectedinherited
unsigned LINE_READER::length
protectedinherited
std::string STRING_LINE_READER::lines
protected

Definition at line 257 of file richio.h.

Referenced by ReadLine().

unsigned LINE_READER::maxLineLength
protectedinherited

maximum allowed capacity using resizing.

Definition at line 90 of file richio.h.

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

size_t STRING_LINE_READER::ndx
protected

Definition at line 258 of file richio.h.

Referenced by ReadLine().

wxString LINE_READER::source
protectedinherited

origin of text lines, e.g. filename or "clipboard"

Definition at line 92 of file richio.h.

Referenced by FILE_LINE_READER::FILE_LINE_READER(), LINE_READER::GetSource(), INPUTSTREAM_LINE_READER::INPUTSTREAM_LINE_READER(), and STRING_LINE_READER().


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