80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
// pbitmap.c
|
|
// Routines to manage a persistent bitmap -- a bitmap that is
|
|
// stored on disk.
|
|
//
|
|
// Copyright (c) 1992,1993,1995 The Regents of the University of California.
|
|
// All rights reserved. See copyright.h for copyright notice and limitation
|
|
// of liability and disclaimer of warranty provisions.
|
|
|
|
#include "copyright.h"
|
|
#include "pbitmap.h"
|
|
|
|
//----------------------------------------------------------------------
|
|
// PersistentBitmap::PersistentBitmap(int)
|
|
// Initialize a bitmap with "numItems" bits, so that every bit is clear.
|
|
// it can be added somewhere on a list.
|
|
//
|
|
// "numItems" is the number of bits in the bitmap.
|
|
//
|
|
// This constructor does not initialize the bitmap from a disk file
|
|
//----------------------------------------------------------------------
|
|
|
|
PersistentBitmap::PersistentBitmap(int numItems):Bitmap(numItems)
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// PersistentBitmap::PersistentBitmap(OpenFile*,int)
|
|
// Initialize a persistent bitmap with "numItems" bits,
|
|
// so that every bit is clear.
|
|
//
|
|
// "numItems" is the number of bits in the bitmap.
|
|
// "file" refers to an open file containing the bitmap (written
|
|
// by a previous call to PersistentBitmap::WriteBack
|
|
//
|
|
// This constructor initializes the bitmap from a disk file
|
|
//----------------------------------------------------------------------
|
|
|
|
PersistentBitmap::PersistentBitmap(OpenFile *file, int numItems):Bitmap(numItems)
|
|
{
|
|
// map has already been initialized by the BitMap constructor,
|
|
// but we will just overwrite that with the contents of the
|
|
// map found in the file
|
|
file->ReadAt((char *)map, numWords * sizeof(unsigned), 0);
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// PersistentBitmap::~PersistentBitmap
|
|
// De-allocate a persistent bitmap.
|
|
//----------------------------------------------------------------------
|
|
|
|
PersistentBitmap::~PersistentBitmap()
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// PersistentBitmap::FetchFrom
|
|
// Initialize the contents of a persistent bitmap from a Nachos file.
|
|
//
|
|
// "file" is the place to read the bitmap from
|
|
//----------------------------------------------------------------------
|
|
|
|
void
|
|
PersistentBitmap::FetchFrom(OpenFile *file)
|
|
{
|
|
file->ReadAt((char *)map, numWords * sizeof(unsigned), 0);
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// PersistentBitmap::WriteBack
|
|
// Store the contents of a persistent bitmap to a Nachos file.
|
|
//
|
|
// "file" is the place to write the bitmap to
|
|
//----------------------------------------------------------------------
|
|
|
|
void
|
|
PersistentBitmap::WriteBack(OpenFile *file)
|
|
{
|
|
file->WriteAt((char *)map, numWords * sizeof(unsigned), 0);
|
|
}
|