]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/packsource.h
Add an API to open files from a collection's sources
[libs/datafile.git] / source / packsource.h
index e2c84a0ac62135b27f3a09cbf3d6bb711880d93b..10e1433279aaa36dee9b1dda39938af5ab6a42b2 100644 (file)
@@ -25,6 +25,7 @@ private:
        class File;
        struct Object;
 
+       typedef std::map<std::string, const File *> FileMap;
        typedef std::map<std::string, const Object *> ObjectMap;
 
        class Pack
@@ -49,7 +50,7 @@ private:
                const std::string &get_filename() const { return filename; }
                unsigned get_base_offset() const { return base_offset; }
 
-               void collect_objects(ObjectMap &) const;
+               void collect_files(FileMap &, const std::string &) const;
        };
 
        class File
@@ -76,7 +77,7 @@ private:
        public:
                File(const Pack &, const std::string &);
 
-               RefPtr<IO::Base> open() const;
+               RefPtr<IO::Seekable> open() const;
                const std::string &get_filename() const { return filename; }
                std::string get_full_name() const;
                bool is_collection() const { return collection; }
@@ -103,16 +104,21 @@ private:
        };
 
        std::list<Pack> packs;
+       FileMap files;
        ObjectMap objects;
 
 public:
        /// Adds a pack file to load objects from.  The index is read immediately.
        void add_pack_file(const std::string &);
 
+       /** Adds a pack file with a regex to filter logical files.  The index is
+       read on the first call; subsequent calls will use cached data. */
+       void add_pack_file(const std::string &, const std::string &);
 
        virtual bool is_loadable(const CollectionItemTypeBase &, const std::string &) const;
        virtual NameList get_names(const CollectionItemTypeBase &) const;
        virtual void load(Collection &, const CollectionItemTypeBase &, const std::string &) const;
+       virtual IO::Seekable *open(const std::string &) const;
 };
 
 } // namespace DataFile