Example #1
0
        /* create tie mapping */
        public static TieMappingRec NewTieMapping()
        {
            TieMappingRec Mapping = new TieMappingRec();

            Mapping.List      = null;
            Mapping.FreeList  = null;
            Mapping.ChunkList = null;
            return(Mapping);
        }
Example #2
0
        /* 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];
            }
        }
Example #3
0
        /* 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);
        }
Example #4
0
        /* 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;
        }