-- CedarMemoryImpl.mesa -- Last changed by Doug Wyatt, September 26, 1980 12:33 AM DIRECTORY Memory, CedarStorage USING [Zone, CreateZone], CedarStorageOps USING [NewQuantumNode, FreeQuantumNode], SystemDefs USING [AllocateHeapNode, FreeHeapNode]; MemoryImpl: PROGRAM IMPORTS CedarStorage,CedarStorageOps,SystemDefs EXPORTS Memory = { nodes: INTEGER_0; -- for debugging UZHandle: TYPE = LONG POINTER TO UZObject; UZObject: TYPE = MACHINE DEPENDENT RECORD [ procs(0:0..31): LONG POINTER TO UZProcs, data(2:0..31): CedarStorage.Zone ]; UZProcs: TYPE = MACHINE DEPENDENT RECORD [ alloc(0): PROC[self: UZHandle, size: CARDINAL] RETURNS[LONG POINTER], dealloc(1): PROC[self: UZHandle, object: LONG POINTER] ]; UZAlloc: PROC[self: UZHandle, size: CARDINAL] RETURNS[LONG POINTER] = { nodes_nodes+1; RETURN[CedarStorageOps.NewQuantumNode[size: size, zone: self.data]]; }; UZDeAlloc: PROC[self: UZHandle, object: LONG POINTER] = { nodes_nodes-1; CedarStorageOps.FreeQuantumNode[ptr: object]; }; czone: CedarStorage.Zone _ CedarStorage.CreateZone[ dm: heap, tr: quantized, initialSize: 20000]; uzprocs: UZProcs _ [alloc: UZAlloc, dealloc: UZDeAlloc]; uzobject: UZObject _ [procs: @uzprocs, data: czone]; uzhandle: UZHandle = @uzobject; zone: UNCOUNTED ZONE _ LOOPHOLE[uzhandle]; NewZone: PUBLIC PROC[STRING] RETURNS[UNCOUNTED ZONE] = { RETURN[zone] }; MDSHandle: TYPE = POINTER TO MDSObject; MDSObject: TYPE = MACHINE DEPENDENT RECORD [ procs(0:0..15): POINTER TO MDSProcs, data(1:0..15): POINTER TO MDSData ]; MDSProcs: TYPE = MACHINE DEPENDENT RECORD [ alloc(0): PROC[self: MDSHandle, size: CARDINAL] RETURNS[POINTER], dealloc(1): PROC[self: MDSHandle, object: POINTER] ]; MDSData: TYPE = RECORD[]; MDSAlloc: PROC[self: MDSHandle, size: CARDINAL] RETURNS[POINTER] = { RETURN[SystemDefs.AllocateHeapNode[size]]; }; MDSDeAlloc: PROC[self: MDSHandle, object: POINTER] = { SystemDefs.FreeHeapNode[object]; }; mdsprocs: MDSProcs _ [alloc: MDSAlloc, dealloc: MDSDeAlloc]; mdsobject: MDSObject _ [procs: @mdsprocs, data: NIL]; mdshandle: MDSHandle = @mdsobject; mds: PUBLIC MDSZone _ LOOPHOLE[mdshandle]; }.(670)