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
The name of a file, such as a texture file or an Egg file.
Definition: filename.h:39
This class records a particular byte sub-range within an existing file on disk.
Definition: subfileInfo.h:26
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
A base class for things which need to inherit from both TypedObject and from ReferenceCount.
A composite directory within the VirtualFileSystem: this maps to more than one directory on different...
A list of VirtualFiles, as returned by VirtualFile::scan_directory().
The abstract base class for a mount definition used within a VirtualFileSystem.
A hierarchy of directories and files that appears to be one continuous file system,...
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...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
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.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.