KiCad PCB EDA Suite
INPUTSTREAM_LINE_READER Class Reference

A LINE_READER that reads from a wxInputStream object. More...

#include <richio.h>

Inheritance diagram for INPUTSTREAM_LINE_READER:
LINE_READER

Public Member Functions

 INPUTSTREAM_LINE_READER (wxInputStream *aStream, const wxString &aSource)
 Construct a LINE_READER from a wxInputStream object. More...
 
char * ReadLine () override
 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

wxInputStream * m_stream
 
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

A LINE_READER that reads from a wxInputStream object.

Definition at line 274 of file richio.h.

Constructor & Destructor Documentation

◆ INPUTSTREAM_LINE_READER()

INPUTSTREAM_LINE_READER::INPUTSTREAM_LINE_READER ( wxInputStream *  aStream,
const wxString &  aSource 
)

Construct a LINE_READER from a wxInputStream object.

Parameters
aStreamA pointer to a wxInputStream object to read.
aSourceThe name of the stream source, for error reporting purposes.

Definition at line 306 of file richio.cpp.

307 :
309 m_stream( aStream )
310{
311 m_source = aSource;
312}
wxInputStream * m_stream
Definition: richio.h:288
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: richio.cpp:111
wxString m_source
origin of text lines, e.g. filename or "clipboard"
Definition: richio.h:163
#define LINE_READER_LINE_DEFAULT_MAX
Definition: richio.h:73

References LINE_READER::m_source.

Member Function Documentation

◆ expandCapacity()

void LINE_READER::expandCapacity ( unsigned  aNewsize)
protectedinherited

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

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

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

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

◆ GetSource()

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

◆ Length()

unsigned LINE_READER::Length ( ) const
inlineinherited

◆ Line()

char * LINE_READER::Line ( ) const
inlineinherited

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 }

References LINE_READER::m_line.

Referenced by bench_string_lr(), bench_string_lr_reuse(), bench_wxbis(), bench_wxbis_reuse(), bench_wxis(), bench_wxis_reuse(), LEGACY_PLUGIN::biuParse(), LEGACY_PLUGIN::checkVersion(), LEGACY_PLUGIN::degParse(), detect_file_type(), NETLIST_READER::GuessNetlistFileType(), SCH_LEGACY_PLUGIN_CACHE::Load(), 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::loadDocs(), 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_CACHE::loadHeader(), SCH_LEGACY_PLUGIN::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::loadRect(), SCH_LEGACY_PLUGIN::loadSymbol(), 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(), DSNLEXER::readLine(), FILTER_READER::ReadLine(), LP_CACHE::SkipIndex(), EXCELLON_IMAGE::TestFileIsExcellon(), and GERBER_FILE_IMAGE::TestFileIsRS274().

◆ LineNumber()

◆ operator char *()

LINE_READER::operator char * ( ) const
inlineinherited

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_READER::Line().

◆ ReadLine()

char * INPUTSTREAM_LINE_READER::ReadLine ( )
overridevirtual

Read a line of text into the buffer and increments the line number counter.

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

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

Implements LINE_READER.

Definition at line 315 of file richio.cpp.

316{
317 m_length = 0;
318
319 for( ;; )
320 {
322 THROW_IO_ERROR( _( "Maximum line length exceeded" ) );
323
324 if( m_length + 1 > m_capacity )
326
327 // this read may fail, docs say to test LastRead() before trusting cc.
328 char cc = m_stream->GetC();
329
330 if( !m_stream->LastRead() )
331 break;
332
333 m_line[ m_length++ ] = cc;
334
335 if( cc == '\n' )
336 break;
337 }
338
339 m_line[ m_length ] = 0;
340
341 // m_lineNum is incremented even if there was no line read, because this
342 // leads to better error reporting when we hit an end of file.
343 ++m_lineNum;
344
345 return m_length ? m_line : nullptr;
346}
void expandCapacity(unsigned aNewsize)
Will expand the capacity of line up to maxLineLength but not greater, so be careful about making assu...
Definition: richio.cpp:140
#define _(s)
#define THROW_IO_ERROR(msg)
Definition: ki_exception.h:38

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

Referenced by bench_wxbis(), bench_wxbis_reuse(), bench_wxis(), and bench_wxis_reuse().

Member Data Documentation

◆ m_capacity

unsigned LINE_READER::m_capacity
protectedinherited

◆ m_length

unsigned LINE_READER::m_length
protectedinherited

◆ m_line

◆ m_lineNum

◆ m_maxLineLength

unsigned LINE_READER::m_maxLineLength
protectedinherited

maximum allowed capacity using resizing.

Definition at line 161 of file richio.h.

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

◆ m_source

wxString LINE_READER::m_source
protectedinherited

◆ m_stream

wxInputStream* INPUTSTREAM_LINE_READER::m_stream
protected

Definition at line 288 of file richio.h.

Referenced by ReadLine().


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