84 lines
2.7 KiB
C++
84 lines
2.7 KiB
C++
#include "precomp.h"
|
|
/*
|
|
* memory.cpp
|
|
*
|
|
* Copyright (c) 1993 - 1995 by DataBeam Corporation, Lexington, KY
|
|
*
|
|
* Abstract:
|
|
* This is the implementation file for the Memory class. Instances of
|
|
* this class represent chunks of data that are passed through a system.
|
|
* This class is particularly useful in cases where a memory buffer
|
|
* needs to be used in several different places, none of which know
|
|
* about each other. This is because this class encapsulates things
|
|
* like lock counts, which are useful for holding memory until
|
|
* everyone that needs it is through.
|
|
*
|
|
* Note that this class does NOT do memory management. It is told by
|
|
* a higher level memory manager where its buffers are, etc. For this
|
|
* reason, this class does not do any platform specific calls.
|
|
*
|
|
* Private Instance Variables:
|
|
* Length
|
|
* This is the length of the reference buffer.
|
|
* Copy_Ptr
|
|
* This is the address of the allocated buffer that this object
|
|
* uses.
|
|
* Free_Stack
|
|
* This is a pointer to the free stack list from which the copy
|
|
* buffer was allocated. This is held within this object as a
|
|
* convenience to the memory manager, allowing it to return the
|
|
* buffer to the free pool more quickly and easily.
|
|
* Block_Number
|
|
* This is the block number of the memory block that this object
|
|
* represents. This is held within this object as a convenience to
|
|
* the memory manager, allowing it to return the buffer to the free
|
|
* pool more quickly and easily.
|
|
* Memory_Lock_Mode
|
|
* This fields indicates whether this memory object should be destroyed
|
|
* only when the lock count on the memory buffer reaches zero (NORMAL),
|
|
* or whether its okay to destroy immediately when the memory block is
|
|
* freed (IGNORED).
|
|
*
|
|
* Private Member Functions:
|
|
* None.
|
|
*
|
|
* Caveats:
|
|
* None.
|
|
*
|
|
* Author:
|
|
* James P. Galvin, Jr.
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
* Memory ()
|
|
*
|
|
* Public
|
|
*
|
|
* Functional Description:
|
|
* This is the constructor for the Memory class. It just initializes
|
|
* all instance variable, based on the passed in values.
|
|
*/
|
|
Memory::Memory (
|
|
PUChar reference_ptr,
|
|
ULong length,
|
|
PUChar copy_ptr,
|
|
BlockNumber block_number,
|
|
MemoryLockMode memory_lock_mode) :
|
|
Length (length), Copy_Ptr (copy_ptr),
|
|
Block_Number (block_number), Memory_Lock_Mode (memory_lock_mode)
|
|
{
|
|
/*
|
|
* If the reference pointer is a valid pointer, then the pointer type
|
|
* will be set to reference (indicating that the reference data has not
|
|
* yet been copied). If the reference pointer is NULL, then this is
|
|
* a memory allocation with no associated reference data, so set the
|
|
* pointer type to copy.
|
|
*/
|
|
if (reference_ptr != NULL)
|
|
memcpy (Copy_Ptr, reference_ptr, (Int) Length);
|
|
}
|
|
|
|
|