Panda3D
 All Classes Functions Variables Enumerations
virtualFile.h
1 // Filename: virtualFile.h
2 // Created by: drose (03Aug02)
3 //
4 ////////////////////////////////////////////////////////////////////
5 //
6 // PANDA 3D SOFTWARE
7 // Copyright (c) Carnegie Mellon University. All rights reserved.
8 //
9 // All use of this software is subject to the terms of the revised BSD
10 // license. You should have received a copy of this license along
11 // with this source code in a file named "LICENSE."
12 //
13 ////////////////////////////////////////////////////////////////////
14 
15 #ifndef VIRTUALFILE_H
16 #define VIRTUALFILE_H
17 
18 #include "pandabase.h"
19 
20 #include "filename.h"
21 #include "subfileInfo.h"
22 #include "pointerTo.h"
23 #include "typedReferenceCount.h"
24 #include "ordered_vector.h"
25 #include "pvector.h"
26 
27 class VirtualFileMount;
28 class VirtualFileList;
29 class VirtualFileSystem;
30 
31 
32 ////////////////////////////////////////////////////////////////////
33 // Class : VirtualFile
34 // Description : The abstract base class for a file or directory
35 // within the VirtualFileSystem.
36 ////////////////////////////////////////////////////////////////////
37 class EXPCL_PANDAEXPRESS VirtualFile : public TypedReferenceCount {
38 public:
39  INLINE VirtualFile();
40 
41 PUBLISHED:
42  virtual VirtualFileSystem *get_file_system() const=0;
43  virtual Filename get_filename() const=0;
44  INLINE const Filename &get_original_filename() const;
45 
46  virtual bool has_file() const;
47  virtual bool is_directory() const;
48  virtual bool is_regular_file() const;
49  virtual bool is_writable() const;
50 
51  BLOCKING virtual bool delete_file();
52  BLOCKING virtual bool rename_file(VirtualFile *new_file);
53  BLOCKING virtual bool copy_file(VirtualFile *new_file);
54 
55  BLOCKING PT(VirtualFileList) scan_directory() const;
56 
57  void output(ostream &out) const;
58  BLOCKING void ls(ostream &out = cout) const;
59  BLOCKING void ls_all(ostream &out = cout) const;
60 
61  BLOCKING INLINE string read_file(bool auto_unwrap) const;
62  BLOCKING virtual istream *open_read_file(bool auto_unwrap) const;
63  BLOCKING virtual void close_read_file(istream *stream) const;
64  virtual bool was_read_successful() const;
65 
66  BLOCKING INLINE bool write_file(const string &data, bool auto_wrap);
67  BLOCKING virtual ostream *open_write_file(bool auto_wrap, bool truncate);
68  BLOCKING virtual ostream *open_append_file();
69  BLOCKING virtual void close_write_file(ostream *stream);
70 
71  BLOCKING virtual iostream *open_read_write_file(bool truncate);
72  BLOCKING virtual iostream *open_read_append_file();
73  BLOCKING virtual void close_read_write_file(iostream *stream);
74 
75  BLOCKING virtual streamsize get_file_size(istream *stream) const;
76  BLOCKING virtual streamsize get_file_size() const;
77  BLOCKING virtual time_t get_timestamp() const;
78 
79  virtual bool get_system_info(SubfileInfo &info);
80 
81 public:
82  virtual bool atomic_compare_and_exchange_contents(string &orig_contents, const string &old_contents, const string &new_contents);
83  virtual bool atomic_read_contents(string &contents) const;
84 
85  INLINE void set_original_filename(const Filename &filename);
86  bool read_file(string &result, bool auto_unwrap) const;
87  virtual bool read_file(pvector<unsigned char> &result, bool auto_unwrap) const;
88  virtual bool write_file(const unsigned char *data, size_t data_size, bool auto_wrap);
89 
90  static bool simple_read_file(istream *stream, pvector<unsigned char> &result);
91  static bool simple_read_file(istream *stream, pvector<unsigned char> &result, size_t max_bytes);
92 
93 protected:
94  virtual bool scan_local_directory(VirtualFileList *file_list,
95  const ov_set<string> &mount_points) const;
96 
97 private:
98  void r_ls_all(ostream &out, const Filename &root) const;
99 
100  Filename _original_filename;
101 
102 
103 public:
104  virtual TypeHandle get_type() const {
105  return get_class_type();
106  }
107  virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
108  static TypeHandle get_class_type() {
109  return _type_handle;
110  }
111  static void init_type() {
112  TypedReferenceCount::init_type();
113  register_type(_type_handle, "VirtualFile",
114  TypedReferenceCount::get_class_type());
115  }
116 
117 private:
118  static TypeHandle _type_handle;
119 
120  friend class VirtualFileComposite;
121 };
122 
123 INLINE ostream &operator << (ostream &out, const VirtualFile &file);
124 
125 
126 #include "virtualFile.I"
127 
128 #endif
A hierarchy of directories and files that appears to be one continuous file system, even though the files may originate from several different sources that may not be related to the actual OS&#39;s file system.
A base class for things which need to inherit from both TypedObject and from ReferenceCount.
The abstract base class for a file or directory within the VirtualFileSystem.
Definition: virtualFile.h:37
A specialization of ordered_vector that emulates a standard STL set: one copy of each element is allo...
A list of VirtualFiles, as returned by VirtualFile::scan_directory().
The name of a file, such as a texture file or an Egg file.
Definition: filename.h:44
The abstract base class for a mount definition used within a VirtualFileSystem.
This class records a particular byte sub-range within an existing file on disk.
Definition: subfileInfo.h:29
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:85
A composite directory within the VirtualFileSystem: this maps to more than one directory on different...