// -*- mode: cpp; mode: fold -*-
// Description								/*{{{*/
// $Id: cachefile.h,v 1.3 1999/06/27 03:18:28 jgg Exp $
/* ######################################################################
   
   CacheFile - Simple wrapper class for opening, generating and whatnot
   
   This class implements a simple 2 line mechanism to open various sorts
   of caches. It can operate as root, as not root, show progress and so on,
   it transparently handles everything necessary.
   
   ##################################################################### */
									/*}}}*/
#ifndef PKGLIB_CACHEFILE_H
#define PKGLIB_CACHEFILE_H

#ifdef __GNUG__
#pragma interface "apt-pkg/cachefile.h"
#endif 

#include <apt-pkg/depcache.h>
#include <apt-pkg/dpkginit.h>

class pkgCacheFile
{
   protected:
   
   MMap *Map;
   pkgDepCache *Cache;
   pkgDpkgLock *Lock;
   
   public:
      
   // We look pretty much exactly like a pointer to a dep cache
   inline operator pkgDepCache &() {return *Cache;};
   inline operator pkgDepCache *() {return Cache;};
   inline pkgDepCache *operator ->() {return Cache;};
   inline pkgDepCache &operator *() {return *Cache;};
   inline pkgDepCache::StateCache &operator [](pkgCache::PkgIterator const &I) {return (*Cache)[I];};
   inline unsigned char &operator [](pkgCache::DepIterator const &I) {return (*Cache)[I];};

   // Release the dpkg status lock
   inline void ReleaseLock() {Lock->Close();};
   
   bool Open(OpProgress &Progress,bool WithLock = true);
   
   pkgCacheFile();
   ~pkgCacheFile();
};

#endif