Panda3D
Public Member Functions | List of all members
DatagramOutputFile Class Reference

This class can be used to write a binary file that consists of an arbitrary header followed by a number of datagrams. More...

#include "datagramOutputFile.h"

Inheritance diagram for DatagramOutputFile:
DatagramSink

Public Member Functions

void close ()
 Closes the file. More...
 
virtual bool copy_datagram (SubfileInfo &result, const Filename &filename)
 Copies the file data from the entire indicated file (via the vfs) as the next datagram. More...
 
virtual bool copy_datagram (SubfileInfo &result, const SubfileInfo &source)
 Copies the file data from the range of the indicated file (outside of the vfs) as the next datagram. More...
 
virtual void flush ()
 Ensures that all datagrams previously written will be visible in the output file. More...
 
virtual const FileReferenceget_file ()
 Returns the FileReference that provides the target for these datagrams, if any, or NULL if the datagrams do not written to a file on disk. More...
 
virtual streampos get_file_pos ()
 Returns the current file position within the data stream, if any, or 0 if the file position is not meaningful or cannot be determined. More...
 
virtual const Filenameget_filename ()
 Returns the filename that provides the target for these datagrams, if any, or empty string if the datagrams do not get written to a file on disk. More...
 
ostream & get_stream ()
 Returns the ostream represented by the output file. More...
 
virtual bool is_error ()
 Returns true if the file has reached an error condition. More...
 
bool open (const FileReference *file)
 Opens the indicated filename for writing. More...
 
bool open (const Filename &filename)
 Opens the indicated filename for writing. More...
 
bool open (ostream &out, const Filename &filename=Filename())
 Starts writing to the indicated stream. More...
 
virtual bool put_datagram (const Datagram &data)
 Writes the given datagram to the file. More...
 
bool write_header (const string &header)
 Writes a sequence of bytes to the beginning of the datagram file. More...
 
- Public Member Functions inherited from DatagramSink
 DatagramSink ()
 Does nothing since this is class is just the definition of an interface. More...
 
virtual ~DatagramSink ()
 Does nothing since this is class is just the definition of an interface. More...
 

Detailed Description

This class can be used to write a binary file that consists of an arbitrary header followed by a number of datagrams.

Definition at line 33 of file datagramOutputFile.h.

Member Function Documentation

◆ close()

void DatagramOutputFile::close ( )

Closes the file.

This is also implicitly done when the DatagramOutputFile destructs.

Definition at line 78 of file datagramOutputFile.cxx.

References VirtualFileSystem::close_write_file(), VirtualFileSystem::get_global_ptr(), and write_header().

Referenced by RecorderController::close(), BamFile::close(), open(), and BamCache::store().

◆ copy_datagram() [1/2]

bool DatagramOutputFile::copy_datagram ( SubfileInfo result,
const Filename filename 
)
virtual

Copies the file data from the entire indicated file (via the vfs) as the next datagram.

This is intended to support potentially very large datagrams.

Returns true on success, false on failure or if this method is unimplemented. On true, fills "result" with the information that references the copied file, if possible.

Reimplemented from DatagramSink.

Definition at line 156 of file datagramOutputFile.cxx.

References StreamWriter::add_uint32(), StreamWriter::add_uint64(), VirtualFileSystem::get_file(), and VirtualFileSystem::get_global_ptr().

Referenced by put_datagram().

◆ copy_datagram() [2/2]

bool DatagramOutputFile::copy_datagram ( SubfileInfo result,
const SubfileInfo source 
)
virtual

Copies the file data from the range of the indicated file (outside of the vfs) as the next datagram.

This is intended to support potentially very large datagrams.

Returns true on success, false on failure or if this method is unimplemented. On true, fills "result" with the information that references the copied file, if possible.

Reimplemented from DatagramSink.

Definition at line 229 of file datagramOutputFile.cxx.

References StreamWriter::add_uint32(), StreamWriter::add_uint64(), SubfileInfo::get_filename(), SubfileInfo::get_size(), SubfileInfo::get_start(), is_error(), and Filename::open_read().

◆ flush()

void DatagramOutputFile::flush ( void  )
virtual

Ensures that all datagrams previously written will be visible in the output file.

Implements DatagramSink.

Definition at line 305 of file datagramOutputFile.cxx.

References get_filename().

Referenced by is_error().

◆ get_file()

const FileReference * DatagramOutputFile::get_file ( )
virtual

Returns the FileReference that provides the target for these datagrams, if any, or NULL if the datagrams do not written to a file on disk.

Reimplemented from DatagramSink.

Definition at line 332 of file datagramOutputFile.cxx.

References get_file_pos().

Referenced by get_filename().

◆ get_file_pos()

streampos DatagramOutputFile::get_file_pos ( )
virtual

Returns the current file position within the data stream, if any, or 0 if the file position is not meaningful or cannot be determined.

For DatagramOutputFiles that return a meaningful file position, this will be pointing to the first byte following the datagram returned after a call to put_datagram().

Reimplemented from DatagramSink.

Definition at line 349 of file datagramOutputFile.cxx.

Referenced by get_file(), and BamCache::store().

◆ get_filename()

const Filename & DatagramOutputFile::get_filename ( )
virtual

Returns the filename that provides the target for these datagrams, if any, or empty string if the datagrams do not get written to a file on disk.

Reimplemented from DatagramSink.

Definition at line 320 of file datagramOutputFile.cxx.

References get_file().

Referenced by flush().

◆ get_stream()

ostream & DatagramOutputFile::get_stream ( )
inline

Returns the ostream represented by the output file.

Definition at line 56 of file datagramOutputFile.I.

Referenced by open().

◆ is_error()

bool DatagramOutputFile::is_error ( )
virtual

Returns true if the file has reached an error condition.

Implements DatagramSink.

Definition at line 287 of file datagramOutputFile.cxx.

References flush().

Referenced by copy_datagram(), and RecorderController::is_error().

◆ open() [1/3]

bool DatagramOutputFile::open ( const FileReference file)

◆ open() [2/3]

bool DatagramOutputFile::open ( const Filename filename)
inline

Opens the indicated filename for writing.

Returns true on success, false on failure.

Definition at line 46 of file datagramOutputFile.I.

References get_stream(), and open().

◆ open() [3/3]

bool DatagramOutputFile::open ( ostream &  out,
const Filename filename = Filename() 
)

Starts writing to the indicated stream.

Returns true on success, false on failure. The DatagramOutputFile does not take ownership of the stream; you are responsible for closing or deleting it when you are done.

Definition at line 57 of file datagramOutputFile.cxx.

References close().

◆ put_datagram()

bool DatagramOutputFile::put_datagram ( const Datagram data)
virtual

Writes the given datagram to the file.

Returns true on success, false if there is an error.

Implements DatagramSink.

Definition at line 120 of file datagramOutputFile.cxx.

References StreamWriter::add_uint32(), StreamWriter::add_uint64(), copy_datagram(), Datagram::get_data(), and Datagram::get_length().

Referenced by write_header().

◆ write_header()

bool DatagramOutputFile::write_header ( const string &  header)

Writes a sequence of bytes to the beginning of the datagram file.

This may be called any number of times after the file has been opened and before the first datagram is written. It may not be called once the first datagram is written.

Definition at line 104 of file datagramOutputFile.cxx.

References put_datagram().

Referenced by RecorderController::begin_record(), close(), TypedWritable::encode_to_bam_stream(), Texture::ensure_loader_type(), BamFile::get_writer(), BamCache::list_index(), and BamCache::store().


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