![]() |
http://www.sim.no http://www.coin3d.org |
The SoOutput class is an abstraction of an output stream.SoOutput offers the ability to write basic types to a file or a memory buffer in either ASCII or binary format. More...
#include <Inventor/SoOutput.h>
Public Types | |
enum | Stage { COUNT_REFS, WRITE } |
enum | Annotations { ADDRESSES = 0x01, REF_COUNTS = 0x02 } |
Public Member Functions | |
SoOutput (void) | |
SoOutput (SoOutput *dictOut) | |
virtual | ~SoOutput () |
virtual void | setFilePointer (FILE *newFP) |
virtual FILE * | getFilePointer (void) const |
virtual SbBool | openFile (const char *const fileName) |
virtual void | closeFile (void) |
SbBool | setCompression (const SbName &compmethod, const float level=0.5f) |
virtual void | setBuffer (void *bufPointer, size_t initSize, SoOutputReallocCB *reallocFunc, int32_t offset=0) |
virtual SbBool | getBuffer (void *&bufPointer, size_t &nBytes) const |
virtual size_t | getBufferSize (void) const |
virtual void | resetBuffer (void) |
virtual void | setBinary (const SbBool flag) |
virtual SbBool | isBinary (void) const |
virtual void | setHeaderString (const SbString &str) |
virtual void | resetHeaderString (void) |
virtual void | setFloatPrecision (const int precision) |
void | setStage (Stage stage) |
Stage | getStage (void) const |
void | incrementIndent (const int levels=1) |
void | decrementIndent (const int levels=1) |
virtual void | write (const char c) |
virtual void | write (const char *s) |
virtual void | write (const SbString &s) |
virtual void | write (const SbName &n) |
virtual void | write (const int i) |
virtual void | write (const unsigned int i) |
virtual void | write (const short s) |
virtual void | write (const unsigned short s) |
virtual void | write (const float f) |
virtual void | write (const double d) |
virtual void | writeBinaryArray (const unsigned char *c, const int length) |
virtual void | writeBinaryArray (const int32_t *const l, const int length) |
virtual void | writeBinaryArray (const float *const f, const int length) |
virtual void | writeBinaryArray (const double *const d, const int length) |
virtual void | indent (void) |
virtual void | reset (void) |
void | setCompact (SbBool flag) |
SbBool | isCompact (void) const |
void | setAnnotation (uint32_t bits) |
uint32_t | getAnnotation (void) |
int | addReference (const SoBase *base) |
int | findReference (const SoBase *base) const |
void | setReference (const SoBase *base, int refid) |
void | addDEFNode (SbName name) |
SbBool | lookupDEFNode (SbName name) |
void | removeDEFNode (SbName name) |
void | pushProto (SoProto *proto) |
SoProto * | getCurrentProto (void) const |
void | popProto (void) |
void | addRoute (SoFieldContainer *from, const SbName &fromfield, SoFieldContainer *to, const SbName &tofield) |
void | resolveRoutes (void) |
Static Public Member Functions | |
static const SbName * | getAvailableCompressionMethods (unsigned int &num) |
static SbString | getDefaultASCIIHeader (void) |
static SbString | getDefaultBinaryHeader (void) |
Protected Member Functions | |
SbBool | isToBuffer (void) const |
size_t | bytesInBuf (void) const |
SbBool | makeRoomInBuf (size_t nBytes) |
void | convertShort (short s, char *to) |
void | convertInt32 (int32_t l, char *to) |
void | convertFloat (float f, char *to) |
void | convertDouble (double d, char *to) |
void | convertShortArray (short *from, char *to, int len) |
void | convertInt32Array (int32_t *from, char *to, int len) |
void | convertFloatArray (float *from, char *to, int len) |
void | convertDoubleArray (double *from, char *to, int len) |
Static Protected Member Functions | |
static SbString | padHeader (const SbString &inString) |
Protected Attributes | |
SbBool | wroteHeader |
Friends | |
class | SoBase |
class | SoWriterefCounter |
The SoOutput class is an abstraction of an output stream.
SoOutput offers the ability to write basic types to a file or a memory buffer in either ASCII or binary format.
enum SoOutput::Stage |
Enumerates the possible stages of a write operation (writing needs to be done in mutiple passes).
Values from this enum is used for debugging purposes to annotate the output from a write operation.
SoOutput::SoOutput | ( | void | ) |
The default constructor makes an SoOutput instance which will write to the standard output.
SoOutput::SoOutput | ( | SoOutput * | dictOut | ) |
Constructs an SoOutput which has a copy of the set of named references from dictOut.
|
virtual |
Destructor.
|
virtual |
Set up a new file pointer which we will write to.
Important note: do not use this method when the Coin library has been compiled as an MSWindows DLL, as passing FILE* instances back or forth to DLLs is dangerous and will most likely cause a crash. This is an intrinsic limitation for MSWindows DLLs.
|
virtual |
Returns the current filepointer. If we're writing to a memory buffer, NULL
is returned.
Important note: do not use this method when the Coin library has been compiled as an MSWindows DLL, as passing FILE* instances back or forth to DLLs is dangerous and will most likely cause a crash. This is an intrinsic limitation for MSWindows DLLs.
|
virtual |
Opens a file for writing. If the file can not be opened or is not writeable, FALSE will be returned.
Files opened by this method will automatically be closed if the user supplies another filepointer, another filename for writing, or if the SoOutput instance is deleted.
References SoDebugError::postWarning().
Referenced by SoIntersectionDetectionAction::apply(), and SoDebug::writeToFile().
|
virtual |
Closes the currently opened file, but only if the file was passed to SoOutput through the openFile() method.
Referenced by SoIntersectionDetectionAction::apply(), and SoDebug::writeToFile().
SbBool SoOutput::setCompression | ( | const SbName & | compmethod, |
const float | level = 0.5f |
||
) |
Sets the compression method and level used when writing the file. compmethod is the compression library/method to use when compressing. level is the compression level, where 0.0 means no compression and 1.0 means maximum compression.
Currently BZIP2, GZIP are the only compression methods supported, and you have to compile Coin with zlib and bzip2-support to enable them.
Supply compmethod = NONE or level = 0.0 if you want to disable compression. The compression is disabled by default.
Please note that it's not possible to compress when writing to a memory buffer.
This method will return TRUE if the compression method selected is available. If it's not available, FALSE will be returned and compression is disabled.
References SbName::getString(), and SoDebugError::postWarning().
|
static |
Returns the array of available compression methods. The number of elements in the array will be stored in num.
References SbList< Type >::getArrayPtr(), and SbList< Type >::getLength().
|
virtual |
Sets up a memory buffer of size initSize for writing. Writing will start at bufPointer + offset.
If the buffer is filled up, reallocFunc is called to get more memory. If reallocFunc returns NULL, further writing is disabled.
Important note: remember that the resultant memory buffer after write operations have completed may reside somewhere else in memory than on bufPointer if reallocFunc is set. It is a good idea to make it a habit to always use getBuffer() to retrieve the memory buffer pointer after write operations.
Here's a complete, stand-alone usage example which shows how to write a scene graph to a memory buffer:
Referenced by SoFieldContainer::get(), SoField::get(), and SoMField::get1().
|
virtual |
Returns the current buffer in bufPointer and the current write position of the buffer in nBytes. If we're writing into a file and not a memory buffer, FALSE is returned and the other return values will be undefined.
Referenced by SoFieldContainer::get(), SoField::get(), and SoMField::get1().
|
virtual |
Returns total size of memory buffer.
|
virtual |
Reset the memory buffer write pointer back to the beginning of the buffer.
|
virtual |
Set whether or not to write the output as a binary stream.
|
virtual |
Returns a flag which indicates whether or not we're writing the output as a binary stream.
Referenced by SoWriteAction::beginTraversal(), SoMField::get1(), SoGate::inputChanged(), SoConcatenate::SoConcatenate(), SoSelectOne::SoSelectOne(), SoSwitch::write(), SoGroup::write(), SoFieldData::write(), SoPath::write(), SoField::write(), SoField::writeConnection(), SoFieldData::writeFieldDescriptions(), SoBase::writeFooter(), and SoBase::writeHeader().
|
virtual |
Set the output file header string.
Referenced by SoDebug::write(), and SoDebug::writeToFile().
|
virtual |
Reset the header string to the default one.
|
virtual |
Set the precision used when writing floating point numbers to ASCII files. precision should be between 0 and 8. The double precision will be set to precision * 2.
void SoOutput::setStage | ( | Stage | stage | ) |
Sets an indicator on the current stage. This is necessary to do as writing has to be done in multiple stages to account for the export of references/connections within the scene graphs.
This method is basically just used from within SoWriteAction, and should usually not be of interest to the application programmer. Do not use it unless you really know what you are doing.
Referenced by SoWriteAction::beginTraversal(), SoFieldContainer::get(), SoField::get(), and SoMField::get1().
SoOutput::Stage SoOutput::getStage | ( | void | ) | const |
Returns an indicator on the current write stage. Writing is done in two passes, one to count and check connections, one to do the actual ascii or binary export of data.
You should not need to use this method, as it is meant for internal purposes in Coin.
Referenced by SoBase::addWriteReference(), SoBaseKit::countMyFields(), SoBlinker::write(), SoPendulum::write(), SoShuttle::write(), SoVRMLScript::write(), SoSwitch::write(), SoVRMLParent::write(), SoGroup::write(), SoFieldData::write(), SoBaseKit::write(), SoPath::write(), SoNode::write(), SoField::write(), and SoNode::writeInstance().
void SoOutput::incrementIndent | ( | const int | levels = 1 | ) |
Increase indentation level in the file.
Referenced by SoMField::get1(), and SoBase::writeHeader().
void SoOutput::decrementIndent | ( | const int | levels = 1 | ) |
Decrease indentation level in the file.
References SoDebugError::postInfo().
Referenced by SoMField::get1(), and SoBase::writeFooter().
|
virtual |
Write the character in c.
For binary write, the character plus 3 padding zero characters will be written.
Referenced by SoWriteAction::beginTraversal(), SoSFEnum::findEnumName(), SoField::get(), SoMField::get1(), SoGate::inputChanged(), SoConcatenate::SoConcatenate(), SoSelectOne::SoSelectOne(), SoVRMLScript::write(), SoSwitch::write(), SoGroup::write(), SoFieldData::write(), SoPath::write(), SoNode::write(), SoField::write(), SoField::writeConnection(), SoFieldData::writeFieldDescriptions(), SoBase::writeFooter(), and SoBase::writeHeader().
|
virtual |
Write the character string pointed to by s.
For binary write, a 4-byte MSB-ordered integer with the string length, plus the string plus padding zero characters to get on a 4-byte boundary (if necessary) will be written.
|
virtual |
Write the character string in s. The string will be written with apostrophes. Cast SbString to char * to write without apostrophes.
If we are supposed to write in binary format, no apostrophes will be added, and writing will be done in the exact same manner as with SoOutput::write(const char * s).
References SbString::getLength(), and SbString::getString().
|
virtual |
Write the character string in n. The name will be enclosed by apostrophes. If you want to write an SbName instance without the apostrophes, cast the argument to a char *.
If we are supposed to write in binary format, no apostrophes will be added, and writing will be done in the exact same manner as with SoOutput::write(const char * s).
References SbName::getString().
|
virtual |
Write i as a character string, or as an architecture independent binary pattern if the setBinary() flag is activated.
References SbString::getLength(), SbString::getString(), and SbString::sprintf().
|
virtual |
Write i as a character string, or as an architecture independent binary pattern if the setBinary() flag is activated.
References SbString::getLength(), SbString::getString(), and SbString::sprintf().
|
virtual |
Write s as a character string, or as an architecture independent binary pattern if the setBinary() flag is activated.
References SbString::getLength(), SbString::getString(), and SbString::sprintf().
|
virtual |
Write s as a character string, or as an architecture independent binary pattern if the setBinary() flag is activated. If we're writing in ASCII format, the value will be written in base 16 (hexadecimal).
References SbString::getLength(), SbString::getString(), and SbString::sprintf().
|
virtual |
Write f as a character string.
References SbString::getLength(), SbString::getString(), and SbString::sprintf().
|
virtual |
Write d as a character string.
References SbString::getLength(), SbString::getString(), and SbString::sprintf().
|
virtual |
Write the given number of bytes to either a file or a memory buffer in binary format.
References SoDebugError::postWarning().
|
virtual |
Write an length array of int32_t values in binary format.
|
virtual |
Write an array of float values in binary format.
|
virtual |
Write an array of double values in binary format.
|
virtual |
Call this method after writing a newline to a file to indent the next line to the correct position.
References SoDebugError::postWarning().
Referenced by SoMField::get1(), SoGate::inputChanged(), SoConcatenate::SoConcatenate(), SoSelectOne::SoSelectOne(), SoVRMLScript::write(), SoFieldData::write(), SoPath::write(), SoNode::write(), SoField::write(), SoField::writeConnection(), SoFieldData::writeFieldDescriptions(), SoBase::writeFooter(), and SoBase::writeHeader().
|
virtual |
Reset all value and make ready for using another filepointer or buffer.
References SbList< Type >::getLength().
void SoOutput::setCompact | ( | SbBool | flag | ) |
Set up the output to be more compact than with the default write routines.
References SoDebugError::postWarning().
SbBool SoOutput::isCompact | ( | void | ) | const |
Returns whether or not the write routines tries to compact the data when writing it (i.e. using less whitespace, etc).
Note that "compact" in this sense does not mean "bitwise compression", as it could easily be mistaken for.
void SoOutput::setAnnotation | ( | uint32_t | bits | ) |
Set up annotation of different aspects of the output data. This is not useful for much else than debugging purposes, I s'pose.
References SoDebugError::postWarning().
uint32_t SoOutput::getAnnotation | ( | void | ) |
Returns the current annotation debug bitflag settings.
|
static |
Return the default header string written to ASCII files.
Referenced by makeRoomInBuf(), and padHeader().
|
static |
Return the default header string written to binary files.
Referenced by makeRoomInBuf().
int SoOutput::addReference | ( | const SoBase * | base | ) |
Makes a unique id for base and adds a mapping into our dictionary.
int SoOutput::findReference | ( | const SoBase * | base | ) | const |
Returns the unique identifier for base or -1 if not found.
Referenced by SoBase::writeHeader().
void SoOutput::setReference | ( | const SoBase * | base, |
int | refid | ||
) |
Sets the reference for base manually.
void SoOutput::addDEFNode | ( | SbName | name | ) |
Adds name to the set of currently DEF'ed node names so far in the output process.
References SbName::getString().
SbBool SoOutput::lookupDEFNode | ( | SbName | name | ) |
Checks whether name is already DEF'ed at this point in the output process. Returns TRUE if name is DEF'ed.
References SbName::getString().
void SoOutput::removeDEFNode | ( | SbName | name | ) |
Removes name from the set of DEF'ed node names. Used after the last reference to a DEF'ed node if we want to reuse the DEF at a later point in the file.
References SbName::getString().
void SoOutput::pushProto | ( | SoProto * | proto | ) |
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
SoProto * SoOutput::getCurrentProto | ( | void | ) | const |
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
References SbList< Type >::getLength().
Referenced by SoFieldData::write(), and SoNode::write().
void SoOutput::popProto | ( | void | ) |
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
References SbList< Type >::getLength().
void SoOutput::addRoute | ( | SoFieldContainer * | from, |
const SbName & | fromfield, | ||
SoFieldContainer * | to, | ||
const SbName & | tofield | ||
) |
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
void SoOutput::resolveRoutes | ( | void | ) |
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
References SoType::getName(), SoBase::getName(), SbName::getString(), SoBase::getTypeId(), and SoDebugError::postInfo().
Referenced by SoWriteAction::beginTraversal().
|
protected |
Returns TRUE of we're set up to write to a memory buffer.
|
protected |
Returns current write position.
Note that for memory buffer writing, this includes the offset from SoOutput::setBuffer(), if any.
|
protected |
Check that the current memory buffer has enough space to contain the given number of bytes needed for the next write operation.
Returns FALSE if there's not enough space left, otherwise TRUE.
Note that there will automatically be made an attempt at allocating more memory if the realloction callback function argument of setBuffer() was not NULL.
References getDefaultASCIIHeader(), getDefaultBinaryHeader(), and SbString::getString().
|
protected |
Convert the short integer in s to most-significant-byte first format and put the resulting bytes sequentially at to.
|
protected |
Convert the 32-bit integer in l to most-significant-byte first format and put the resulting bytes sequentially at to.
|
protected |
Convert the single-precision floating point number in f to most-significant-byte first format and put the resulting bytes sequentially at to.
|
protected |
Convert the double-precision floating point number in d to most-significant-byte first format and put the resulting bytes sequentially at to.
|
protected |
Convert len short integer values from the array at from into the array at to from native host format to network independent format (i.e. most significant byte first).
|
protected |
Convert len 32-bit integer values from the array at from into the array at to from native host format to network independent format (i.e. most significant byte first).
|
protected |
Convert len single-precision floating point values from the array at from into the array at to from native host format to network independent format (i.e. most significant byte first).
|
protected |
Convert len double-precision floating point values from the array at from into the array at to from native host format to network independent format (i.e. most significant byte first).
Pads the header we're writing so it contains the correct amount of bytes for the alignment of the following binary writes.
References getDefaultASCIIHeader(), and SbString::getLength().
|
protected |
Indicates whether or not the file format header has been written out. As long as this is FALSE, the header will be written once upon the first invocation of any write method in the class.
Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.
Generated on Fri Feb 17 2017 for Coin by Doxygen. 1.8.13