KiCad PCB EDA Suite
STDISTREAM_LINE_READER Class Reference

LINE_READER that wraps a given std::istream instance. More...

#include <stdstream_line_reader.h>

Inheritance diagram for STDISTREAM_LINE_READER:
LINE_READER IFSTREAM_LINE_READER

Public Member Functions

 STDISTREAM_LINE_READER ()
 
 ~STDISTREAM_LINE_READER ()
 
char * ReadLine () override
 Function ReadLine reads a line of text into the buffer and increments the line number counter. More...
 
void SetStream (std::istream &aStream)
 Set the stream for this line reader. 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

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...
 

Private Attributes

std::string m_buffer
 
std::istream * m_stream
 

Detailed Description

LINE_READER that wraps a given std::istream instance.

Definition at line 37 of file stdstream_line_reader.h.

Constructor & Destructor Documentation

◆ STDISTREAM_LINE_READER()

STDISTREAM_LINE_READER::STDISTREAM_LINE_READER ( )

Definition at line 28 of file stdstream_line_reader.cpp.

28  :
29  LINE_READER( 0 ),
30  m_stream( nullptr )
31 {
32  m_line = nullptr;
33  m_lineNum = 0;
34 }
char * m_line
the read line of UTF8 text
Definition: richio.h:87
unsigned m_lineNum
Definition: richio.h:85
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:102

References LINE_READER::m_line, and LINE_READER::m_lineNum.

◆ ~STDISTREAM_LINE_READER()

STDISTREAM_LINE_READER::~STDISTREAM_LINE_READER ( )

Definition at line 37 of file stdstream_line_reader.cpp.

38 {
39  // this is only a view into a string, it cant be deleted by the base
40  m_line = nullptr;
41 }
char * m_line
the read line of UTF8 text
Definition: richio.h:87

References LINE_READER::m_line.

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

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

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

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

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

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

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

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

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

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

References LINE_READER::Line().

◆ ReadLine()

char * STDISTREAM_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 44 of file stdstream_line_reader.cpp.

45 {
46  getline( *m_stream, m_buffer );
47 
48  m_buffer.append( 1, '\n' );
49 
50  m_length = m_buffer.size();
51  m_line = (char*) m_buffer.data(); //ew why no const??
52 
53  // lineNum is incremented even if there was no line read, because this
54  // leads to better error reporting when we hit an end of file.
55  ++m_lineNum;
56 
57  return m_stream->eof() ? nullptr : m_line;
58 }
char * m_line
the read line of UTF8 text
Definition: richio.h:87
unsigned m_lineNum
Definition: richio.h:85
unsigned m_length
no. bytes in line before trailing nul.
Definition: richio.h:84

References m_buffer, LINE_READER::m_length, LINE_READER::m_line, LINE_READER::m_lineNum, and m_stream.

◆ SetStream()

void STDISTREAM_LINE_READER::SetStream ( std::istream &  aStream)

Set the stream for this line reader.

Parameters
aStreama stream to read

Definition at line 61 of file stdstream_line_reader.cpp.

62 {
63  // Could be done with a virtual getStream function, but the
64  // virtual function call is a noticeable (but minor) penalty within
65  // ReadLine() in tight loops
66  m_stream = &aStream;
67 }

References m_stream.

Referenced by IFSTREAM_LINE_READER::IFSTREAM_LINE_READER(), parse(), and KI_TEST::ReadBoardItemFromStream().

Member Data Documentation

◆ m_buffer

std::string STDISTREAM_LINE_READER::m_buffer
private

Definition at line 53 of file stdstream_line_reader.h.

Referenced by ReadLine().

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

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

◆ m_source

wxString LINE_READER::m_source
protectedinherited

◆ m_stream

std::istream* STDISTREAM_LINE_READER::m_stream
private

Definition at line 54 of file stdstream_line_reader.h.

Referenced by ReadLine(), and SetStream().


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