#include <PersistentIStream.h>
Public Types | |
typedef ThePEG::Ptr < PersistentBase >::pointer | BPtr |
Alias for a reference counted pointer to PersistentBase . | |
typedef ThePEG::Ptr < PersistentBase > ::const_pointer | cBPtr |
Alias for a reference counted pointer to a const PersistentBase . | |
typedef ThePEG::Ptr < PersistentBase > ::transient_pointer | tBPtr |
Alias for a transient pointer to PersistentBase . | |
typedef ThePEG::Ptr < PersistentBase > ::transient_const_pointer | tcBPtr |
Alias for a transient pointer to a const PersistentBase . | |
typedef vector< BPtr > | ObjectVector |
A vector of pointers to persistent objects. | |
typedef InputDescription::DescriptionVector | DescriptionVector |
A vector of bare pointers to InputDescription objects. | |
Public Member Functions | |
PersistentIStream (istream &is, bool keepid=false) | |
Constuctor giving an input stream to be used as an underlying istream. | |
PersistentIStream (string, bool keepid=false) | |
Constuctor giving a file name to read from. | |
~PersistentIStream () | |
The destructor. | |
template<typename T> | |
PersistentIStream & | operator>> (RCPtr< T > &ptr) |
Operator for extracting persistent objects from the stream. | |
template<typename T> | |
PersistentIStream & | operator>> (ConstRCPtr< T > &ptr) |
Operator for extracting persistent objects from the stream. | |
template<typename T> | |
PersistentIStream & | operator>> (TransientRCPtr< T > &ptr) |
Operator for extracting persistent objects from the stream. | |
template<typename T> | |
PersistentIStream & | operator>> (TransientConstRCPtr< T > &ptr) |
Operator for extracting persistent objects from the stream. | |
template<typename Container> | |
void | getContainer (Container &c) |
Intput of containers streamable objects. | |
BPtr | getObject () |
Read in an object. | |
void | getObjectPart (tBPtr obj, const InputDescription *pid) |
For a given object, read the member variables corresponding to a given InputDescription object. | |
const InputDescription * | getClass () |
Read a class description from the underlying stream and return a corresponding InputDescription object. | |
PersistentIStream & | setPedantic () |
Set pedantic mode. | |
PersistentIStream & | setTolerant () |
Set tolerant mode. | |
bool | good () const |
Check the state of the stream. | |
bool | operator! () const |
Check the state of the stream. | |
operator bool () const | |
Check the state of the stream. | |
bool | pedantic () const |
Check the tolerance. | |
Operators for extracting built-in types from the stream. | |
PersistentIStream & | operator>> (string &) |
Read a character string. | |
PersistentIStream & | operator>> (char &) |
Read a character. | |
PersistentIStream & | operator>> (signed char &) |
Read a signed character. | |
PersistentIStream & | operator>> (unsigned char &) |
Read an unsigned character. | |
PersistentIStream & | operator>> (int &i) |
Read an integer. | |
PersistentIStream & | operator>> (unsigned int &i) |
Read an unsigned integer. | |
PersistentIStream & | operator>> (long &i) |
Read a long integer. | |
PersistentIStream & | operator>> (unsigned long &i) |
Read an unsigned long integer. | |
PersistentIStream & | operator>> (short &i) |
Read a short integer. | |
PersistentIStream & | operator>> (unsigned short &i) |
Read an unsigned short integer. | |
PersistentIStream & | operator>> (double &d) |
Read a double. | |
PersistentIStream & | operator>> (float &f) |
Read a float. | |
PersistentIStream & | operator>> (bool &) |
Read a bool. | |
PersistentIStream & | operator>> (Complex &) |
Read a Complex. | |
Private Member Functions | |
void | init () |
Internal initialization. | |
char | get () |
Get the next character from the associated istream. | |
char | escaped () |
Get the next character from the associated istream and decode it if it is escaped. | |
void | setBadState () |
Set the stream in a bad state. | |
void | getSep () |
Read a field separator from the stream. | |
void | skipField () |
Scan the stream for the next field separator. | |
bool | beginObject () |
Check if the next char to be read is a tBegin marker. | |
void | endObject () |
Scan the stream to the end of the current object. | |
void | endBase (string classname) |
Scan stream for "end base class" marker. | |
istream & | is () |
Return a reference to the associated stream. | |
const istream & | is () const |
Return a const reference to the associated stream. | |
PersistentIStream () | |
Standard ctors and assignment are private and not implemented. | |
PersistentIStream (const PersistentIStream &) | |
Standard ctors and assignment are private and not implemented. | |
PersistentIStream & | operator= (const PersistentIStream &) |
Standard ctors and assignment are private and not implemented. | |
Private Attributes | |
ObjectVector | readObjects |
Lists of objects that have been read. | |
DescriptionVector | readClasses |
Lists of classes and corresponding version strings that have been read. | |
istream * | theIStream |
A pointer to the associated istream. | |
bool | isPedantic |
Pedantic or tolerant. | |
bool | allocStream |
True if the associated istream should be deleted when the PersistentIStream is destroyed. | |
bool | badState |
False if no errors has occurred. | |
int | version |
Version number of the PersistentOStream which has written the file being read. | |
int | subVersion |
Subversion number of the PersistentOStream which has written the file being read. | |
bool | keepId |
If keepId is true, the order in which the original objects were created will be kept. | |
Static Private Attributes | |
Special marker characters | |
static const char | tBegin = '{' |
The special marker character indicating the beginning of an object. | |
static const char | tEnd = '}' |
The special marker character indicating the end of an object. | |
static const char | tNext = '|' |
The marker character indicating the beginning of the next base class in case of multiple inheritance. | |
static const char | tNull = '\\' |
The special marker character indicating an escaped marker character. | |
static const char | tSep = '\n' |
The special marker character indicating the end of a value. | |
static const char | tNoSep = 'n' |
The special marker character used to avoid confusion with escaped tSep markers. | |
static const char | tYes = 'y' |
The special marker character indicating a true boolean value. | |
static const char | tNo = 'n' |
The special marker character indicating a false boolean value. |
Basic types and pointers to objects derived from PersistentBase
should be read in the same order they were written out. If pedantic()
is true the same classes that were written out must be present in the current program. If pedantic()
is false and if an object is read for which only a base class is present in the current program, only the parts corresponding to the base class will be read, and the rest will be gracefully skipped.
Each base class of a given object will be asked to read its members from the stream starting from the least derived class going to the most derived one. Members may be pointers to other persistent objects or basic types or containers of these. The output for each object part should be implemented by specializing the ClassTraits<T>::input method, which otherwise will call the non-virtual persistentInput
function of the class. Note that for diamond-shaped multiple inheritance structures, the virtual base classes will be written out several times for the same object.
Definition at line 47 of file PersistentIStream.h.
typedef ThePEG::Ptr< PersistentBase >::pointer ThePEG::PersistentIStream::BPtr |
Alias for a reference counted pointer to PersistentBase .
Definition at line 51 of file PersistentIStream.h.
typedef ThePEG::Ptr< PersistentBase >::const_pointer ThePEG::PersistentIStream::cBPtr |
Alias for a reference counted pointer to a const PersistentBase .
Definition at line 51 of file PersistentIStream.h.
typedef ThePEG::Ptr< PersistentBase >::transient_pointer ThePEG::PersistentIStream::tBPtr |
Alias for a transient pointer to PersistentBase .
Definition at line 51 of file PersistentIStream.h.
typedef ThePEG::Ptr< PersistentBase >::transient_const_pointer ThePEG::PersistentIStream::tcBPtr |
Alias for a transient pointer to a const PersistentBase .
Definition at line 51 of file PersistentIStream.h.
A vector of bare pointers to InputDescription objects.
Definition at line 57 of file PersistentIStream.h.
ThePEG::PersistentIStream::PersistentIStream | ( | istream & | is, | |
bool | keepid = false | |||
) | [inline] |
Constuctor giving an input stream to be used as an underlying istream.
If keepid is true, the order in which the original objects were created will be kept.
Definition at line 66 of file PersistentIStream.h.
References init().
ThePEG::PersistentIStream::PersistentIStream | ( | string | , | |
bool | keepid = false | |||
) |
Constuctor giving a file name to read from.
If the first character in the string is a '|', the corresponding program is run and its standard output is used instead. If the filename ends in ".gz" the file is uncompressed with gzip. If keepid is true, the order in which the original objects were created will be kept.
PersistentIStream& ThePEG::PersistentIStream::operator>> | ( | RCPtr< T > & | ptr | ) | [inline] |
Operator for extracting persistent objects from the stream.
ptr | this pointer will refer to the extracted object. |
Definition at line 97 of file PersistentIStream.h.
References ThePEG::Pointer::dynamic_ptr_cast(), getObject(), and setBadState().
PersistentIStream& ThePEG::PersistentIStream::operator>> | ( | ConstRCPtr< T > & | ptr | ) | [inline] |
Operator for extracting persistent objects from the stream.
ptr | this pointer will refer to the extracted object. |
Definition at line 110 of file PersistentIStream.h.
References ThePEG::Pointer::dynamic_ptr_cast(), getObject(), and setBadState().
PersistentIStream& ThePEG::PersistentIStream::operator>> | ( | TransientRCPtr< T > & | ptr | ) | [inline] |
Operator for extracting persistent objects from the stream.
ptr | this pointer will refer to the extracted object. |
Definition at line 123 of file PersistentIStream.h.
References ThePEG::Pointer::dynamic_ptr_cast(), getObject(), and setBadState().
PersistentIStream& ThePEG::PersistentIStream::operator>> | ( | TransientConstRCPtr< T > & | ptr | ) | [inline] |
Operator for extracting persistent objects from the stream.
ptr | this pointer will refer to the extracted object. |
Definition at line 136 of file PersistentIStream.h.
References ThePEG::Pointer::dynamic_ptr_cast(), getObject(), and setBadState().
void ThePEG::PersistentIStream::getContainer | ( | Container & | c | ) | [inline] |
Intput of containers streamable objects.
c | the container into which objects are added. |
Definition at line 253 of file PersistentIStream.h.
References good().
Referenced by ThePEG::operator>>().
BPtr ThePEG::PersistentIStream::getObject | ( | ) |
Read in an object.
Create an object and read its data from the stream.
Referenced by operator>>().
void ThePEG::PersistentIStream::getObjectPart | ( | tBPtr | obj, | |
const InputDescription * | pid | |||
) |
For a given object, read the member variables corresponding to a given InputDescription object.
obj | the object to be read into. | |
pid | a pointer to an InputDescription describing the (sub)class to be read. |
PersistentIStream& ThePEG::PersistentIStream::setPedantic | ( | ) | [inline] |
Set pedantic mode.
If the stream is set to be tolerant it is allowed to read an object from the stream even if the corresponding class is not known to the running executable, under the condition that a public base class of the unknown class is known. If the stream is set to be pedantic this is not allowed. By default, the stream is pedantic.
Definition at line 294 of file PersistentIStream.h.
References isPedantic.
Referenced by ThePEG::pedantic().
PersistentIStream& ThePEG::PersistentIStream::setTolerant | ( | ) | [inline] |
Set tolerant mode.
If the stream is set to be tolerant it is allowed to read an object from the stream even if the corresponding class is not known to the running executable, under the condition that a public base class of the unknown class is known. If the stream is set to be pedantic this is not allowed. By default, the stream is pedantic.
Definition at line 307 of file PersistentIStream.h.
References isPedantic.
Referenced by ThePEG::tolerant().
bool ThePEG::PersistentIStream::pedantic | ( | ) | const [inline] |
Check the tolerance.
Returns true if setPedantic() has been called or if not setTolerant() has been called.
Definition at line 331 of file PersistentIStream.h.
References isPedantic.
Referenced by getSep().
void ThePEG::PersistentIStream::endObject | ( | ) | [private] |
Scan the stream to the end of the current object.
If any new object are found these are read prom the stream to ensure that the pointer structure is preserved.
void ThePEG::PersistentIStream::endBase | ( | string | classname | ) | [private] |
Scan stream for "end base class" marker.
The classname is the name of the class currently being read and is only used for documenting exceptions.
bool ThePEG::PersistentIStream::isPedantic [private] |
Pedantic or tolerant.
See description of the setPedantic() and setTolerant() methods.
Definition at line 441 of file PersistentIStream.h.
Referenced by pedantic(), setPedantic(), and setTolerant().
int ThePEG::PersistentIStream::version [private] |
Version number of the PersistentOStream which has written the file being read.
Definition at line 456 of file PersistentIStream.h.
int ThePEG::PersistentIStream::subVersion [private] |
Subversion number of the PersistentOStream which has written the file being read.
Definition at line 460 of file PersistentIStream.h.