00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef VIRTUALFILESIMPLE_H
00016 #define VIRTUALFILESIMPLE_H
00017
00018 #include "pandabase.h"
00019
00020 #include "virtualFile.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029 class EXPCL_PANDAEXPRESS VirtualFileSimple : public VirtualFile {
00030 public:
00031 INLINE VirtualFileSimple(VirtualFileMount *mount,
00032 const Filename &local_filename,
00033 bool implicit_pz_file,
00034 int open_flags);
00035
00036 PUBLISHED:
00037 virtual VirtualFileSystem *get_file_system() const;
00038 INLINE VirtualFileMount *get_mount() const;
00039 virtual Filename get_filename() const;
00040
00041 virtual bool has_file() const;
00042 virtual bool is_directory() const;
00043 virtual bool is_regular_file() const;
00044 virtual bool is_writable() const;
00045 INLINE bool is_implicit_pz_file() const;
00046
00047 virtual bool delete_file();
00048 virtual bool rename_file(VirtualFile *new_file);
00049 virtual bool copy_file(VirtualFile *new_file);
00050
00051 virtual istream *open_read_file(bool auto_unwrap) const;
00052 virtual void close_read_file(istream *stream) const;
00053 virtual ostream *open_write_file(bool auto_wrap, bool truncate);
00054 virtual ostream *open_append_file();
00055 virtual void close_write_file(ostream *stream);
00056 virtual iostream *open_read_write_file(bool truncate);
00057 virtual iostream *open_read_append_file();
00058 virtual void close_read_write_file(iostream *stream);
00059
00060 virtual off_t get_file_size(istream *stream) const;
00061 virtual off_t get_file_size() const;
00062 virtual time_t get_timestamp() const;
00063 virtual bool get_system_info(SubfileInfo &info);
00064
00065 public:
00066 virtual bool atomic_compare_and_exchange_contents(string &orig_contents, const string &old_contents, const string &new_contents);
00067 virtual bool atomic_read_contents(string &contents) const;
00068
00069 virtual bool read_file(pvector<unsigned char> &result, bool auto_unwrap) const;
00070 virtual bool write_file(const unsigned char *data, size_t data_size, bool auto_wrap);
00071
00072 protected:
00073 virtual bool scan_local_directory(VirtualFileList *file_list,
00074 const ov_set<string> &mount_points) const;
00075
00076 private:
00077 VirtualFileMount *_mount;
00078 Filename _local_filename;
00079 bool _implicit_pz_file;
00080 int _open_flags;
00081
00082 public:
00083 virtual TypeHandle get_type() const {
00084 return get_class_type();
00085 }
00086 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00087
00088 PUBLISHED:
00089 static TypeHandle get_class_type() {
00090 return _type_handle;
00091 }
00092
00093 public:
00094 static void init_type() {
00095 VirtualFile::init_type();
00096 register_type(_type_handle, "VirtualFileSimple",
00097 VirtualFile::get_class_type());
00098 }
00099
00100 private:
00101 static TypeHandle _type_handle;
00102 };
00103
00104 #include "virtualFileSimple.I"
00105
00106 #endif