KiCad PCB EDA Suite
Loading...
Searching...
No Matches
FILE_OUTPUTFORMATTER Class Reference

Used for text file output. More...

#include <richio.h>

Inheritance diagram for FILE_OUTPUTFORMATTER:
OUTPUTFORMATTER

Public Member Functions

 FILE_OUTPUTFORMATTER (const wxString &aFileName, const wxChar *aMode=wxT("wt"), char aQuoteChar='"' )
 
 ~FILE_OUTPUTFORMATTER ()
 
bool Finish () override
 Flushes the temp file to disk and atomically renames it over the final target path.
 
virtual const char * GetQuoteChar (const char *wrapee) const
 Perform quote character need determination.
 
int PRINTF_FUNC_N Print (int nestLevel, const char *fmt,...)
 Format and write text to the output stream.
 
int PRINTF_FUNC Print (const char *fmt,...)
 Format and write text to the output stream.
 
int Indent (int aNestLevel)
 Write the leading whitespace for a nesting level, with no other output.
 
virtual std::string Quotes (const std::string &aWrapee) const
 Check aWrapee input string for a need to be quoted (e.g.
 
std::string Quotew (const wxString &aWrapee) const
 

Protected Member Functions

void write (const char *aOutBuf, int aCount) override
 sibling temp file, committed by Finish()
 

Static Protected Member Functions

static const char * GetQuoteChar (const char *wrapee, const char *quote_char)
 Perform quote character need determination according to the Specctra DSN specification.
 

Protected Attributes

std::unique_ptr< SIBLING_TEMP_FILEm_tempFile
 

Private Member Functions

int sprint (const char *fmt,...)
 
int vprint (const char *fmt, va_list ap)
 

Private Attributes

std::vector< char > m_buffer
 
char quoteChar [2]
 

Detailed Description

Used for text file output.

Writes through a sibling temp file and atomically renames onto the final target in Finish(). A crash, throw, or power loss between construction and Finish() leaves the final target byte-identical to its prior contents – never truncated. Finish() must be called to save; otherwise the destructor discards the temp file and leaves the target untouched.

It is about 8 times faster than STREAM_OUTPUTFORMATTER for file streams.

Definition at line 482 of file richio.h.

Constructor & Destructor Documentation

◆ FILE_OUTPUTFORMATTER()

FILE_OUTPUTFORMATTER::FILE_OUTPUTFORMATTER ( const wxString & aFileName,
const wxChar * aMode = wxT( "wt" ),
char aQuoteChar = '"' )
Parameters
aFileNameis the full filename to open and save to as a text file.
aModeis what you would pass to wxFopen()'s mode, defaults to wxT( "wt" ) for text files that are to be created here and now.
aQuoteCharis a char used for quoting problematic strings (with whitespace or special characters in them).
Exceptions
IO_ERRORif the sibling temp file cannot be created.

Definition at line 672 of file richio.cpp.

References IO, m_tempFile, OUTPUTFMTBUFZ, and OUTPUTFORMATTER::OUTPUTFORMATTER().

◆ ~FILE_OUTPUTFORMATTER()

FILE_OUTPUTFORMATTER::~FILE_OUTPUTFORMATTER ( )
default

References Finish(), and write().

Member Function Documentation

◆ Finish()

bool FILE_OUTPUTFORMATTER::Finish ( )
overridevirtual

Flushes the temp file to disk and atomically renames it over the final target path.

After a successful return the final target contains the bytes written. A failure before the rename leaves the original contents intact; a directory-flush failure after the rename throws even though the new contents are already visible, because only their durability is in doubt.

Finish() must be called at most once. Calling it again (whether the commit succeeded or failed) is a programming error.

Returns
true on successful commit.
Exceptions
IO_ERRORif fsync, close, rename, or the directory flush fails.

Reimplemented from OUTPUTFORMATTER.

Definition at line 682 of file richio.cpp.

References m_tempFile.

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOARD_EDITOR_CONTROL::ExportNetlist(), DSN::SPECCTRA_DB::ExportPCB(), DSN::SPECCTRA_DB::ExportSESSION(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveDocFile(), SCH_IO_KICAD_LEGACY::SaveSchematicFile(), PANEL_REGULATOR::WriteDataFile(), NETLIST_EXPORTER_SPICE::writeNetlist(), and ~FILE_OUTPUTFORMATTER().

◆ GetQuoteChar() [1/2]

const char * OUTPUTFORMATTER::GetQuoteChar ( const char * wrapee) const
virtualinherited

Perform quote character need determination.

It returns the quote character as a single character string for a given input wrapee string. If the wrappee does not need to be quoted, the return value is "" (the null string), such as when there are no delimiters in the input wrapee string. If you want the quote_char to be assuredly not "", then pass in "(" as the wrappee.

Implementations are free to override the default behavior, which is to call the static function of the same name.

Parameters
wrapeeA string that might need wrapping on each end.
Returns
the quote_char as a single character string, or "" if the wrapee does not need to be wrapped.

Definition at line 372 of file richio.cpp.

References GetQuoteChar(), and quoteChar.

◆ GetQuoteChar() [2/2]

const char * OUTPUTFORMATTER::GetQuoteChar ( const char * wrapee,
const char * quote_char )
staticprotectedinherited

◆ Indent()

int OUTPUTFORMATTER::Indent ( int aNestLevel)
inherited

Write the leading whitespace for a nesting level, with no other output.

Parameters
aNestLevelThe multiple of spaces to write.
Returns
int - the number of characters output.
Exceptions
IO_ERROR,ifthere is a problem outputting, such as a full disk.

Definition at line 416 of file richio.cpp.

References NESTWIDTH, and sprint().

Referenced by BOOST_AUTO_TEST_CASE(), DSN::WIRE::Format(), and Print().

◆ Print() [1/2]

int OUTPUTFORMATTER::Print ( const char * fmt,
... )
inherited

Format and write text to the output stream.

Parameters
fmtA printf() style format string.
...a variable list of parameters that will get blended into the output under control of the format string.
Returns
int - the number of characters output.
Exceptions
IO_ERROR,ifthere is a problem outputting, such as a full disk.

Definition at line 449 of file richio.cpp.

References result, and vprint().

◆ Print() [2/2]

int OUTPUTFORMATTER::Print ( int nestLevel,
const char * fmt,
... )
inherited

Format and write text to the output stream.

Parameters
nestLevelThe multiple of spaces to precede the output with.
fmtA printf() style format string.
...a variable list of parameters that will get blended into the output under control of the format string.
Returns
int - the number of characters output.
Exceptions
IO_ERROR,ifthere is a problem outputting, such as a full disk.

Definition at line 432 of file richio.cpp.

References Indent(), and vprint().

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), CopySexprFile(), COMPONENT::Format(), COMPONENT_NET::Format(), DSN::ANCESTOR::Format(), DSN::BOUNDARY::Format(), DSN::CIRCLE::Format(), DSN::CLASS::Format(), DSN::COMP_ORDER::Format(), DSN::COMPONENT::Format(), DSN::CONTROL::Format(), DSN::ELEM::Format(), DSN::FROMTO::Format(), DSN::GRID::Format(), DSN::IMAGE::Format(), DSN::KEEPOUT::Format(), DSN::LAYER::Format(), DSN::LAYER_NOISE_WEIGHT::Format(), DSN::LAYER_RULE::Format(), DSN::NET::Format(), DSN::NET_OUT::Format(), DSN::PADSTACK::Format(), DSN::PATH::Format(), DSN::PCB::Format(), DSN::PIN::Format(), DSN::PLACE::Format(), DSN::POINT::Format(), DSN::PROPERTY::Format(), DSN::QARC::Format(), DSN::RECTANGLE::Format(), DSN::RULE::Format(), DSN::SESSION::Format(), DSN::SHAPE::Format(), DSN::SPECCTRA_LAYER_PAIR::Format(), DSN::STRINGPROP::Format(), DSN::SUPPLY_PIN::Format(), DSN::TOKPROP::Format(), DSN::UNIT_RES::Format(), DSN::VIA::Format(), DSN::WINDOW::Format(), DSN::WIRE::Format(), DSN::WIRE_VIA::Format(), EDA_TEXT::Format(), LINE_ENDING::Format(), NETLIST::Format(), PAGE_INFO::Format(), PCB_CALCULATOR_DATAFILE::Format(), PCB_PLOT_PARAMS::Format(), STROKE_PARAMS::Format(), TEMPLATE_FIELDNAME::Format(), TEMPLATES::Format(), TITLE_BLOCK::Format(), XNODE::Format(), formatArc(), formatBezier(), BOARD_STACKUP::FormatBoardStackup(), KICAD_FORMAT::FormatBool(), formatCircle(), DSN::CLASSES::FormatContents(), DSN::HISTORY::FormatContents(), DSN::IMAGE::FormatContents(), DSN::PADSTACK::FormatContents(), DSN::PARSER::FormatContents(), DSN::PLACEMENT::FormatContents(), DSN::REGION::FormatContents(), DSN::ROUTE::FormatContents(), DSN::WAS_IS::FormatContents(), XNODE::FormatContents(), KICAD_FORMAT::FormatCustomProperties(), formatDrillSpan(), formatEllipse(), formatEllipseArc(), formatFill(), DSN::PIN_REF::FormatIt(), SCH_IO_KICAD_SEXPR_LIB_CACHE::formatLibraryHeader(), formatNode(), KICAD_FORMAT::FormatOptBool(), formatPinMapOverride(), formatPoly(), formatRect(), KICAD_FORMAT::FormatStreamData(), KICAD_FORMAT::FormatUuid(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveBezier(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveCircle(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveDocFile(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveField(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveField(), SCH_IO_KICAD_LEGACY_LIB_CACHE::savePin(), SCH_IO_KICAD_SEXPR_LIB_CACHE::savePin(), SCH_IO_KICAD_SEXPR_LIB_CACHE::savePinMapData(), SCH_IO_KICAD_LEGACY_LIB_CACHE::savePolyLine(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveRectangle(), SCH_IO_KICAD_LEGACY_LIB_CACHE::SaveSymbol(), SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveText(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveText(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveTextBox(), PANEL_REGULATOR::WriteDataFile(), NETLIST_EXPORTER_SPICE::WriteDirectives(), SPICE_CIRCUIT_MODEL::WriteDirectives(), EMBEDDED_FILES::WriteEmbeddedFiles(), NETLIST_EXPORTER_SPICE::WriteHead(), NETLIST_EXPORTER_SPICE_MODEL::WriteHead(), PCB_CALCULATOR_DATAFILE::WriteHeader(), NETLIST_EXPORTER_SPICE::writeInclude(), NETLIST_EXPORTER_SPICE::writeItems(), NETLIST_EXPORTER_SPICE::writeModels(), NETLIST_EXPORTER_SPICE::WriteTail(), and NETLIST_EXPORTER_SPICE_MODEL::WriteTail().

◆ Quotes()

std::string OUTPUTFORMATTER::Quotes ( const std::string & aWrapee) const
virtualinherited

Check aWrapee input string for a need to be quoted (e.g.

contains a ')' character or a space), and for " double quotes within the string that need to be escaped such that the DSNLEXER will correctly parse the string from a file later.

Parameters
aWrapeeis a string that might need wrapping in double quotes, and it might need to have its internal content escaped, or not.
Returns
a std::string- whose c_str() function can be called for passing to printf() style functions that output UTF8 encoded s-expression streams.
Exceptions
IO_ERROR,ifthere is any kind of problem with the input string.

Definition at line 466 of file richio.cpp.

Referenced by BOOST_AUTO_TEST_CASE(), formatNode(), Quotew(), and SCH_IO_KICAD_SEXPR_LIB_CACHE::SaveSymbol().

◆ Quotew()

◆ sprint()

int OUTPUTFORMATTER::sprint ( const char * fmt,
... )
privateinherited

Definition at line 404 of file richio.cpp.

References vprint().

Referenced by Indent().

◆ vprint()

int OUTPUTFORMATTER::vprint ( const char * fmt,
va_list ap )
privateinherited

Definition at line 378 of file richio.cpp.

References m_buffer, and write().

Referenced by Print(), Print(), and sprint().

◆ write()

void FILE_OUTPUTFORMATTER::write ( const char * aOutBuf,
int aCount )
overrideprotectedvirtual

sibling temp file, committed by Finish()

Implements OUTPUTFORMATTER.

Definition at line 688 of file richio.cpp.

References m_tempFile, and THROW_IO_ERROR.

Referenced by ~FILE_OUTPUTFORMATTER().

Member Data Documentation

◆ m_buffer

std::vector<char> OUTPUTFORMATTER::m_buffer
privateinherited

Definition at line 415 of file richio.h.

Referenced by OUTPUTFORMATTER(), and vprint().

◆ m_tempFile

std::unique_ptr<SIBLING_TEMP_FILE> FILE_OUTPUTFORMATTER::m_tempFile
protected

Definition at line 518 of file richio.h.

Referenced by FILE_OUTPUTFORMATTER(), Finish(), and write().

◆ quoteChar

char OUTPUTFORMATTER::quoteChar[2]
privateinherited

Definition at line 416 of file richio.h.

Referenced by GetQuoteChar(), and OUTPUTFORMATTER().


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