// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: mmap.h,v 1.5 1998/07/15 05:56:45 jgg Exp $
+// $Id: mmap.h,v 1.10 1999/07/15 03:15:49 jgg Exp $
/* ######################################################################
MMap Class - Provides 'real' mmap or a faked mmap using read().
##################################################################### */
/*}}}*/
-// Header section: pkglib
#ifndef PKGLIB_MMAP_H
#define PKGLIB_MMAP_H
#include <string>
#include <apt-pkg/fileutl.h>
+/* This should be a 32 bit type, larger tyes use too much ram and smaller
+ types are too small. Where ever possible 'unsigned long' should be used
+ instead of this internal type */
+typedef unsigned int map_ptrloc;
+
class MMap
{
protected:
- File &Fd;
- unsigned long Flags;
+ unsigned long Flags;
unsigned long iSize;
void *Base;
- bool Map();
- bool Close(bool DoClose = true,bool DoSync = true);
+ bool Map(FileFd &Fd);
+ bool Close(bool DoSync = true);
public:
- enum OpenFlags {NoImmMap = (1<<0),Public = (1<<1),ReadOnly = (1<<2)};
+ enum OpenFlags {NoImmMap = (1<<0),Public = (1<<1),ReadOnly = (1<<2),
+ UnMapped = (1<<3)};
// Simple accessors
inline operator void *() {return Base;};
bool Sync();
bool Sync(unsigned long Start,unsigned long Stop);
- MMap(File &F,unsigned long Flags);
+ MMap(FileFd &F,unsigned long Flags);
+ MMap(unsigned long Flags);
virtual ~MMap();
};
protected:
+ FileFd *Fd;
unsigned long WorkSpace;
Pool *Pools;
unsigned int PoolCount;
inline unsigned long WriteString(string S) {return WriteString(S.begin(),S.size());};
void UsePools(Pool &P,unsigned int Count) {Pools = &P; PoolCount = Count;};
- DynamicMMap(File &F,unsigned long Flags,unsigned long WorkSpace = 1024*1024);
+ DynamicMMap(FileFd &F,unsigned long Flags,unsigned long WorkSpace = 2*1024*1024);
+ DynamicMMap(unsigned long Flags,unsigned long WorkSpace = 2*1024*1024);
virtual ~DynamicMMap();
};