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