KiCad PCB EDA Suite
LINE_READER Class Referenceabstract

An abstract class from which implementation specific LINE_READERs may be derived to read single lines of text and manage a line number counter. More...

#include <richio.h>

Inheritance diagram for LINE_READER:
FILE_LINE_READER FILTER_READER INPUTSTREAM_LINE_READER STDISTREAM_LINE_READER STRING_LINE_READER WHITESPACE_FILTER_READER IFSTREAM_LINE_READER

Public Member Functions

 LINE_READER (unsigned aMaxLineLength=LINE_READER_LINE_DEFAULT_MAX)
 Build a line reader and fixes the length of the maximum supported line length to aMaxLineLength. More...
 
virtual ~LINE_READER ()
 
virtual char * ReadLine ()=0
 Read a line of text into the buffer and increments the line number counter. More...
 
virtual const wxString & GetSource () const
 Returns the name of the source of the lines in an abstract sense. More...
 
char * Line () const
 Return a pointer to the last line that was read in. More...
 
 operator char * () const
 A casting operator that returns a char* pointer to the start of the line buffer. More...
 
virtual unsigned LineNumber () const
 Return the line number of the last line read from this LINE_READER. More...
 
unsigned Length () const
 Return the number of bytes in the last line read from this LINE_READER. More...
 

Protected Member Functions

void expandCapacity (unsigned aNewsize)
 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

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

An abstract class from which implementation specific LINE_READERs may be derived to read single lines of text and manage a line number counter.

Definition at line 80 of file richio.h.

Constructor & Destructor Documentation

◆ LINE_READER()

LINE_READER::LINE_READER ( unsigned  aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX)

Build a line reader and fixes the length of the maximum supported line length to aMaxLineLength.

Definition at line 106 of file richio.cpp.

106  :
107  m_length( 0 ), m_lineNum( 0 ), m_line( nullptr ),
108  m_capacity( 0 ), m_maxLineLength( aMaxLineLength )
109 {
110  if( aMaxLineLength != 0 )
111  {
112  // start at the INITIAL size, expand as needed up to the MAX size in maxLineLength
114 
115  // but never go above user's aMaxLineLength, and leave space for trailing nul
116  if( m_capacity > aMaxLineLength+1 )
117  m_capacity = aMaxLineLength+1;
118 
119  // Be sure there is room for a null EOL char, so reserve at least capacity+1 bytes
120  // to ensure capacity line length and avoid corner cases
121  // Use capacity+5 to cover and corner case
122  m_line = new char[m_capacity+5];
123 
124  m_line[0] = '\0';
125  }
126 }
#define LINE_READER_LINE_INITIAL_SIZE
Definition: richio.h:74
char * m_line
the read line of UTF8 text
Definition: richio.h:158
unsigned m_lineNum
Definition: richio.h:156
unsigned m_capacity
no. bytes allocated for line.
Definition: richio.h:159
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:155
unsigned m_maxLineLength
maximum allowed capacity using resizing.
Definition: richio.h:161

References LINE_READER_LINE_INITIAL_SIZE, m_capacity, and m_line.

◆ ~LINE_READER()

LINE_READER::~LINE_READER ( )
virtual

Definition at line 129 of file richio.cpp.

130 {
131  delete[] m_line;
132 }
char * m_line
the read line of UTF8 text
Definition: richio.h:158

References m_line.

Member Function Documentation

◆ expandCapacity()

void LINE_READER::expandCapacity ( unsigned  aNewsize)
protected

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 length. 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:158
unsigned m_capacity
no. bytes allocated for line.
Definition: richio.h:159
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:155
unsigned m_maxLineLength
maximum allowed capacity using resizing.
Definition: richio.h:161

References m_capacity, m_length, m_line, and m_maxLineLength.

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

◆ GetSource()

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

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 109 of file richio.h.

110  {
111  return m_source;
112  }
wxString m_source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:163

References 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(), 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(), SCH_LEGACY_PLUGIN::loadSymbol(), GPCB_FPL_CACHE::parseFOOTPRINT(), KICAD_NETLIST_PARSER::parseNet(), and WRLPROC::WRLPROC().

◆ Length()

unsigned LINE_READER::Length ( ) const
inline

Return the number of bytes in the last line read from this LINE_READER.

Definition at line 143 of file richio.h.

144  {
145  return m_length;
146  }
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:155

References 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
inline

Return a pointer to the last line that was read in.

Definition at line 117 of file richio.h.

118  {
119  return m_line;
120  }
char * m_line
the read line of UTF8 text
Definition: richio.h:158

References 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::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(), LEGACY_PLUGIN::loadFP_SHAPE(), SCH_LEGACY_PLUGIN::loadHeader(), SCH_LEGACY_PLUGIN_CACHE::loadHeader(), SCH_LEGACY_PLUGIN::loadJunction(), 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::loadSymbol(), SCH_LEGACY_PLUGIN::loadText(), SCH_LEGACY_PLUGIN_CACHE::loadText(), LEGACY_PLUGIN::loadTrackList(), SCH_LEGACY_PLUGIN::loadWire(), 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
inline

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

Definition at line 125 of file richio.h.

126  {
127  return Line();
128  }
char * Line() const
Return a pointer to the last line that was read in.
Definition: richio.h:117

References Line().

◆ ReadLine()

Member Data Documentation

◆ m_capacity

unsigned LINE_READER::m_capacity
protected

no. bytes allocated for line.

Definition at line 159 of file richio.h.

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

◆ m_length

◆ m_line

◆ m_lineNum

◆ m_maxLineLength

unsigned LINE_READER::m_maxLineLength
protected

maximum allowed capacity using resizing.

Definition at line 161 of file richio.h.

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

◆ m_source

wxString LINE_READER::m_source
protected

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