// Filename: bamCacheIndex.h // Created by: drose (19Jun06) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) Carnegie Mellon University. All rights reserved. // // All use of this software is subject to the terms of the revised BSD // license. You should have received a copy of this license along // with this source code in a file named "LICENSE." // //////////////////////////////////////////////////////////////////// #ifndef BAMCACHEINDEX_H #define BAMCACHEINDEX_H #include "pandabase.h" #include "bamCacheRecord.h" #include "pointerTo.h" #include "filename.h" #include "typedWritable.h" #include "linkedListNode.h" #include "pmap.h" #include "pvector.h" //////////////////////////////////////////////////////////////////// // Class : BamCacheIndex // Description : This represents the in-memory index that records the // list of files stored in the BamCache. Since the // memory is also flushed to disk from time to time, // this class is a TypedWritable object. // // For the most part, this class is used only by the // BamCache class. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA_PUTIL BamCacheIndex : public TypedWritable, public LinkedListNode { private: INLINE BamCacheIndex(); ~BamCacheIndex(); public: void write(ostream &out, int indent_level = 0) const; private: void process_new_records(); void release_records(); PT(BamCacheRecord) evict_old_file(); bool add_record(BamCacheRecord *record); bool remove_record(const Filename &source_pathname); private: typedef pmap Records; Records _records; streamsize _cache_size; // This structure is a temporary container. It is only filled in // while reading from a bam file. typedef pvector< PT(BamCacheRecord) > RecordVector; RecordVector _record_vector; public: static void register_with_read_factory(); virtual void write_datagram(BamWriter *manager, Datagram &dg); protected: static TypedWritable *make_from_bam(const FactoryParams ¶ms); virtual int complete_pointers(TypedWritable **plist, BamReader *manager); void fillin(DatagramIterator &scan, BamReader *manager); public: static TypeHandle get_class_type() { return _type_handle; } static void init_type() { TypedWritable::init_type(); register_type(_type_handle, "BamCacheIndex", TypedWritable::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); } virtual TypeHandle force_init_type() {init_type(); return get_class_type();} private: static TypeHandle _type_handle; friend class BamCache; }; #include "bamCacheIndex.I" #endif