Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Multifile Class Reference

#include <multifile.h>

List of all members.

Public Member Functions

bool read_subfile (int index, string &result)
bool open_read (istream *multifile_stream)
bool open_write (ostream *multifile_stream)
bool open_read_write (iostream *multifile_stream)
string add_subfile (const string &subfile_name, istream *subfile_data, int compression_level)
bool extract_subfile_to (int index, ostream &out)

Private Types

typedef ov_set< Subfile *,
IndirectLess< Subfile > > 
Subfiles
typedef pvector< Subfile * > PendingSubfiles
enum  SubfileFlags { SF_deleted = 0x0001, SF_index_invalid = 0x0002, SF_data_invalid = 0x0004, SF_compressed = 0x0008 }

Private Member Functions

 ~Multifile ()
 Multifile (const Multifile &copy)
void operator= (const Multifile &copy)
bool open_write (const Filename &multifile_name)
bool open_read_write (const Filename &multifile_name)
void close ()
INLINE const Filename & get_multifile_name () const
INLINE bool is_read_valid () const
INLINE bool is_write_valid () const
INLINE bool needs_repack () const
void set_scale_factor (size_t scale_factor)
INLINE size_t get_scale_factor () const
string add_subfile (const string &subfile_name, const Filename &filename, int compression_level)
bool flush ()
bool repack ()
int get_num_subfiles () const
int find_subfile (const string &subfile_name) const
bool has_directory (const string &subfile_name) const
bool scan_directory (vector_string &contents, const string &subfile_name) const
void remove_subfile (int index)
const string & get_subfile_name (int index) const
size_t get_subfile_length (int index) const
bool is_subfile_compressed (int index) const
size_t get_subfile_compressed_length (int index) const
INLINE string read_subfile (int index)
istream * open_read_subfile (int index)
bool extract_subfile (int index, const Filename &filename)
void output (ostream &out) const
void ls (ostream &out=cout) const
INLINE streampos word_to_streampos (size_t word) const
INLINE size_t streampos_to_word (streampos fpos) const
INLINE streampos normalize_streampos (streampos fpos) const
streampos pad_to_streampos (streampos fpos)
string add_new_subfile (const string &subfile_name, Subfile *subfile, int compression_level)
void clear_subfiles ()
bool read_index ()
bool write_header ()

Private Attributes

PUBLISHED __pad0__: Multifile()
PUBLISHED __pad1__: bool open_read(const Filename &multifile_name)
Subfiles _subfiles
PendingSubfiles _new_subfiles
PendingSubfiles _removed_subfiles
istream * _read
ostream * _write
streampos _next_index
streampos _last_index
bool _needs_repack
size_t _scale_factor
size_t _new_scale_factor
ifstream _read_file
ofstream _write_file
fstream _read_write_file
Filename _multifile_name
int _file_major_ver
int _file_minor_ver

Static Private Attributes

const char _header [] = "pmf\0\n\r"
const size_t _header_size = 6
const int _current_major_ver = 1
const int _current_minor_ver = 0

Friends

class Subfile


Member Typedef Documentation

typedef pvector<Subfile *> Multifile::PendingSubfiles [private]
 

Definition at line 141 of file multifile.h.

typedef ov_set<Subfile *, IndirectLess<Subfile> > Multifile::Subfiles [private]
 

Definition at line 139 of file multifile.h.


Member Enumeration Documentation

enum Multifile::SubfileFlags [private]
 

Enumeration values:
SF_deleted 
SF_index_invalid 
SF_data_invalid 
SF_compressed 

Definition at line 94 of file multifile.h.


Constructor & Destructor Documentation

Multifile::~Multifile  )  [private]
 

Definition at line 106 of file multifile.cxx.

References close().

Multifile::Multifile const Multifile &  copy  )  [private]
 

Definition at line 116 of file multifile.cxx.


Member Function Documentation

string Multifile::add_new_subfile const string &  subfile_name,
Subfile subfile,
int  compression_level
[private]
 

Definition at line 1005 of file multifile.cxx.

References Multifile::Subfile::_compression_level, Multifile::Subfile::_flags, Multifile::Subfile::_name, _needs_repack, _new_subfiles, _next_index, _removed_subfiles, _subfiles, ov_set< Subfile *, IndirectLess< Subfile > >::insert(), SF_compressed, and SF_deleted.

Referenced by add_subfile().

string Multifile::add_subfile const string &  subfile_name,
istream *  subfile_data,
int  compression_level
 

Definition at line 939 of file multifile.cxx.

References Multifile::Subfile::_source, add_new_subfile(), and is_write_valid().

string Multifile::add_subfile const string &  subfile_name,
const Filename &  filename,
int  compression_level
[private]
 

Definition at line 303 of file multifile.cxx.

References Multifile::Subfile::_source_filename, add_new_subfile(), and is_write_valid().

Referenced by add_directory(), and add_files().

void Multifile::clear_subfiles  )  [private]
 

Definition at line 1059 of file multifile.cxx.

References _new_subfiles, _removed_subfiles, _subfiles, _write, and Multifile::Subfile::rewrite_index_flags().

Referenced by close().

void Multifile::close  )  [private]
 

Definition at line 222 of file multifile.cxx.

References _file_major_ver, _file_minor_ver, _last_index, _multifile_name, _needs_repack, _new_scale_factor, _next_index, _read, _read_file, _read_write_file, _scale_factor, _write, _write_file, clear_subfiles(), flush(), NULL, and repack().

Referenced by flush(), open_read(), open_read_write(), open_write(), read_index(), repack(), write_header(), and ~Multifile().

bool Multifile::extract_subfile int  index,
const Filename &  filename
[private]
 

Definition at line 794 of file multifile.cxx.

References _subfiles, extract_subfile_to(), index, and is_read_valid().

Referenced by extract_files().

bool Multifile::extract_subfile_to int  index,
ostream &  out
 

Definition at line 955 of file multifile.cxx.

References _subfiles, index, is_read_valid(), NULL, and open_read_subfile().

Referenced by extract_files(), and extract_subfile().

int Multifile::find_subfile const string &  subfile_name  )  const [private]
 

Definition at line 546 of file multifile.cxx.

References Multifile::Subfile::_name, _subfiles, and find_subfile().

Referenced by find_subfile(), has_directory(), VirtualFileMountMultifile::has_file(), VirtualFileMountMultifile::is_regular_file(), VirtualFileMountMultifile::open_read_file(), Extractor::request_subfile(), and scan_directory().

bool Multifile::flush  )  [private]
 

Definition at line 339 of file multifile.cxx.

References _last_index, _multifile_name, _new_subfiles, _next_index, _read, _removed_subfiles, _write, close(), Multifile::Subfile::is_data_invalid(), is_write_valid(), NULL, pad_to_streampos(), Multifile::Subfile::rewrite_index_data_start(), Multifile::Subfile::rewrite_index_flags(), streampos_to_word(), Multifile::Subfile::write_data(), write_header(), Multifile::Subfile::write_index(), and writer().

Referenced by add_files(), close(), open_read_subfile(), and repack().

INLINE const Filename& Multifile::get_multifile_name  )  const [private]
 

int Multifile::get_num_subfiles  )  const [private]
 

Definition at line 534 of file multifile.cxx.

References _subfiles.

Referenced by extract_files(), list_files(), ls(), output(), and Extractor::request_all_subfiles().

INLINE size_t Multifile::get_scale_factor  )  const [private]
 

Referenced by add_files(), and list_files().

size_t Multifile::get_subfile_compressed_length int  index  )  const [private]
 

Definition at line 713 of file multifile.cxx.

References _subfiles, and index.

Referenced by list_files().

size_t Multifile::get_subfile_length int  index  )  const [private]
 

Definition at line 685 of file multifile.cxx.

References _subfiles, and index.

Referenced by list_files(), Extractor::request_all_subfiles(), Extractor::request_subfile(), and Extractor::step().

const string & Multifile::get_subfile_name int  index  )  const [private]
 

Definition at line 668 of file multifile.cxx.

References _subfiles, and index.

Referenced by extract_files(), list_files(), ls(), and Extractor::step().

bool Multifile::has_directory const string &  subfile_name  )  const [private]
 

Definition at line 567 of file multifile.cxx.

References Multifile::Subfile::_name, _subfiles, and find_subfile().

Referenced by VirtualFileMountMultifile::has_file(), and VirtualFileMountMultifile::is_directory().

INLINE bool Multifile::is_read_valid  )  const [private]
 

Referenced by extract_subfile(), extract_subfile_to(), open_read_subfile(), read_subfile(), repack(), and set_scale_factor().

bool Multifile::is_subfile_compressed int  index  )  const [private]
 

Definition at line 698 of file multifile.cxx.

References _subfiles, index, and SF_compressed.

Referenced by list_files().

INLINE bool Multifile::is_write_valid  )  const [private]
 

Referenced by add_subfile(), flush(), remove_subfile(), repack(), and set_scale_factor().

void Multifile::ls ostream &  out = cout  )  const [private]
 

Definition at line 828 of file multifile.cxx.

References get_num_subfiles(), and get_subfile_name().

INLINE bool Multifile::needs_repack  )  const [private]
 

Referenced by add_files(), and list_files().

INLINE streampos Multifile::normalize_streampos streampos  fpos  )  const [private]
 

Referenced by pad_to_streampos(), and read_index().

bool Multifile::open_read istream *  multifile_stream  ) 
 

Definition at line 875 of file multifile.cxx.

References _read, close(), and read_index().

Referenced by extract_files(), list_files(), VirtualFileSystem::mount(), and Extractor::set_multifile().

istream * Multifile::open_read_subfile int  index  )  [private]
 

Definition at line 741 of file multifile.cxx.

References Multifile::Subfile::_data_length, Multifile::Subfile::_data_start, Multifile::Subfile::_flags, _read, Multifile::Subfile::_source, Multifile::Subfile::_source_filename, _subfiles, flush(), index, is_read_valid(), NULL, and SF_compressed.

Referenced by extract_subfile_to(), VirtualFileMountMultifile::open_read_file(), read_subfile(), and Extractor::step().

bool Multifile::open_read_write iostream *  multifile_stream  ) 
 

Definition at line 910 of file multifile.cxx.

References _read, _write, close(), and read_index().

bool Multifile::open_read_write const Filename &  multifile_name  )  [private]
 

Definition at line 195 of file multifile.cxx.

References _multifile_name, _read, _read_write_file, _write, close(), multifile_name, and read_index().

Referenced by add_files(), and repack().

bool Multifile::open_write ostream *  multifile_stream  ) 
 

Definition at line 892 of file multifile.cxx.

References _write, and close().

bool Multifile::open_write const Filename &  multifile_name  )  [private]
 

Definition at line 169 of file multifile.cxx.

References _multifile_name, _write, _write_file, close(), and multifile_name.

Referenced by add_files().

void Multifile::operator= const Multifile &  copy  )  [private]
 

Definition at line 126 of file multifile.cxx.

void Multifile::output ostream &  out  )  const [private]
 

Definition at line 817 of file multifile.cxx.

References _multifile_name, and get_num_subfiles().

streampos Multifile::pad_to_streampos streampos  fpos  )  [private]
 

Definition at line 987 of file multifile.cxx.

References _write, normalize_streampos(), and NULL.

Referenced by flush(), and write_header().

bool Multifile::read_index  )  [private]
 

Definition at line 1087 of file multifile.cxx.

References _current_major_ver, _current_minor_ver, _file_major_ver, _file_minor_ver, _header, _header_size, _last_index, _multifile_name, _needs_repack, _new_scale_factor, _next_index, _read, _scale_factor, _subfiles, close(), Multifile::Subfile::is_deleted(), Multifile::Subfile::is_index_invalid(), normalize_streampos(), NULL, Multifile::Subfile::read_index(), reader(), and ov_set< Subfile *, IndirectLess< Subfile > >::sort().

Referenced by open_read(), and open_read_write().

bool Multifile::read_subfile int  index,
string &  result
 

Definition at line 843 of file multifile.cxx.

References _subfiles, index, is_read_valid(), NULL, and open_read_subfile().

INLINE string Multifile::read_subfile int  index  )  [private]
 

void Multifile::remove_subfile int  index  )  [private]
 

Definition at line 651 of file multifile.cxx.

References Multifile::Subfile::_flags, _needs_repack, _removed_subfiles, _subfiles, index, is_write_valid(), and SF_deleted.

bool Multifile::repack  )  [private]
 

Definition at line 457 of file multifile.cxx.

References _last_index, _multifile_name, _new_scale_factor, _new_subfiles, _next_index, _removed_subfiles, _scale_factor, _subfiles, _write, close(), flush(), is_read_valid(), is_write_valid(), and open_read_write().

Referenced by add_files(), and close().

bool Multifile::scan_directory vector_string &  contents,
const string &  subfile_name
const [private]
 

Definition at line 604 of file multifile.cxx.

References Multifile::Subfile::_name, _subfiles, and find_subfile().

Referenced by VirtualFileMountMultifile::scan_directory().

void Multifile::set_scale_factor size_t  scale_factor  )  [private]
 

Definition at line 273 of file multifile.cxx.

References _new_scale_factor, _next_index, _scale_factor, is_read_valid(), is_write_valid(), and scale_factor.

Referenced by add_files().

INLINE size_t Multifile::streampos_to_word streampos  fpos  )  const [private]
 

Referenced by flush(), Multifile::Subfile::rewrite_index_data_start(), and Multifile::Subfile::write_index().

INLINE streampos Multifile::word_to_streampos size_t  word  )  const [private]
 

Referenced by Multifile::Subfile::read_index().

bool Multifile::write_header  )  [private]
 

Definition at line 1183 of file multifile.cxx.

References _current_major_ver, _current_minor_ver, _header, _header_size, _last_index, _multifile_name, _next_index, _scale_factor, _write, close(), NULL, pad_to_streampos(), and writer().

Referenced by flush().


Friends And Related Function Documentation

friend class Subfile [friend]
 

Definition at line 167 of file multifile.h.


Member Data Documentation

PUBLISHED Multifile::__pad0__ [private]
 

Definition at line 36 of file multifile.h.

PUBLISHED Multifile::__pad1__ [private]
 

Definition at line 44 of file multifile.h.

const int Multifile::_current_major_ver = 1 [static, private]
 

Definition at line 37 of file multifile.cxx.

Referenced by read_index(), and write_header().

const int Multifile::_current_minor_ver = 0 [static, private]
 

Definition at line 38 of file multifile.cxx.

Referenced by read_index(), and write_header().

int Multifile::_file_major_ver [private]
 

Definition at line 159 of file multifile.h.

Referenced by close(), and read_index().

int Multifile::_file_minor_ver [private]
 

Definition at line 160 of file multifile.h.

Referenced by close(), and read_index().

const char Multifile::_header = "pmf\0\n\r" [static, private]
 

Definition at line 31 of file multifile.cxx.

Referenced by read_index(), and write_header().

const size_t Multifile::_header_size = 6 [static, private]
 

Definition at line 32 of file multifile.cxx.

Referenced by read_index(), and write_header().

streampos Multifile::_last_index [private]
 

Definition at line 148 of file multifile.h.

Referenced by close(), flush(), read_index(), repack(), and write_header().

Filename Multifile::_multifile_name [private]
 

Definition at line 157 of file multifile.h.

Referenced by close(), flush(), open_read_write(), open_write(), output(), read_index(), repack(), and write_header().

bool Multifile::_needs_repack [private]
 

Definition at line 150 of file multifile.h.

Referenced by add_new_subfile(), close(), read_index(), and remove_subfile().

size_t Multifile::_new_scale_factor [private]
 

Definition at line 152 of file multifile.h.

Referenced by close(), read_index(), repack(), and set_scale_factor().

PendingSubfiles Multifile::_new_subfiles [private]
 

Definition at line 142 of file multifile.h.

Referenced by add_new_subfile(), clear_subfiles(), flush(), and repack().

streampos Multifile::_next_index [private]
 

Definition at line 147 of file multifile.h.

Referenced by add_new_subfile(), close(), flush(), read_index(), repack(), set_scale_factor(), and write_header().

istream* Multifile::_read [private]
 

Definition at line 145 of file multifile.h.

Referenced by close(), flush(), open_read(), open_read_subfile(), open_read_write(), and read_index().

ifstream Multifile::_read_file [private]
 

Definition at line 154 of file multifile.h.

Referenced by close().

fstream Multifile::_read_write_file [private]
 

Definition at line 156 of file multifile.h.

Referenced by close(), and open_read_write().

PendingSubfiles Multifile::_removed_subfiles [private]
 

Definition at line 143 of file multifile.h.

Referenced by add_new_subfile(), clear_subfiles(), flush(), remove_subfile(), and repack().

size_t Multifile::_scale_factor [private]
 

Definition at line 151 of file multifile.h.

Referenced by close(), read_index(), repack(), set_scale_factor(), and write_header().

Subfiles Multifile::_subfiles [private]
 

Definition at line 140 of file multifile.h.

Referenced by add_new_subfile(), clear_subfiles(), extract_subfile(), extract_subfile_to(), find_subfile(), get_num_subfiles(), get_subfile_compressed_length(), get_subfile_length(), get_subfile_name(), has_directory(), is_subfile_compressed(), open_read_subfile(), read_index(), read_subfile(), remove_subfile(), repack(), and scan_directory().

ostream* Multifile::_write [private]
 

Definition at line 146 of file multifile.h.

Referenced by clear_subfiles(), close(), flush(), open_read_write(), open_write(), pad_to_streampos(), repack(), and write_header().

ofstream Multifile::_write_file [private]
 

Definition at line 155 of file multifile.h.

Referenced by close(), and open_write().


The documentation for this class was generated from the following files:
Generated on Fri Apr 18 00:12:48 2003 for Panda by doxygen1.3