/* create tie mapping */ public static TieMappingRec NewTieMapping() { TieMappingRec Mapping = new TieMappingRec(); Mapping.List = null; Mapping.FreeList = null; Mapping.ChunkList = null; return(Mapping); }
/* make more free list entries available */ private static void ExpandFreeList(TieMappingRec Mapping) { ChunkRec NewChunk; int Scan; NewChunk = new ChunkRec(); NewChunk.Nodes = new NodeRec[CHUNKSIZE]; NewChunk.Next = Mapping.ChunkList; Mapping.ChunkList = NewChunk; for (Scan = CHUNKSIZE - 1; Scan >= 0; Scan -= 1) { NewChunk.Nodes[Scan] = new NodeRec(); NewChunk.Nodes[Scan].Next = Mapping.FreeList; Mapping.FreeList = NewChunk.Nodes[Scan]; } }
/* look up note event corresponding to quant event */ public static NoteNoteObjectRec TieMappingLookup( TieMappingRec Mapping, QuantEventRec Key) { NodeRec Scan; Scan = Mapping.List; while (Scan != null) { if (Scan.Key == Key) { return(Scan.Value); } Scan = Scan.Next; } Debug.Assert(false); // key not found return(null); }
/* add a quant-note pair */ public static void TieMappingAddPair( TieMappingRec Mapping, QuantEventRec QuantEvent, NoteNoteObjectRec NoteEvent) { NodeRec NewNode; /* allocate */ if (Mapping.FreeList == null) { ExpandFreeList(Mapping); } /* unlink first mapping entry */ NewNode = Mapping.FreeList; Mapping.FreeList = Mapping.FreeList.Next; /* fill in fields */ NewNode.Key = QuantEvent; NewNode.Value = NoteEvent; NewNode.Next = Mapping.List; Mapping.List = NewNode; }