Exemplo n.º 1
0
        protected override sealed void DoRead(uint pageid, byte[] result)
        {
            RWFrame frame = null;
            //////////////////////////////////by cat
            if (!map.TryGetValue(pageid, out frame))
            {
                frame = new RWFrame(pageid);
                map[pageid] = frame;
            }

            if (!frame.Resident)
            {
                frame.DataSlotId = pool.AllocSlot();
                dev.Read(pageid, pool[frame.DataSlotId]);
                pool[frame.DataSlotId].CopyTo(result, 0);
            }
            pool[frame.DataSlotId].CopyTo(result, 0);
            //////////////////////////////////////////////////////

            readList.updateFrame(frame, false);
            writeList.updateFrame(frame, false);
        }
Exemplo n.º 2
0
        protected override sealed void DoWrite(uint pageid, byte[] data)
        {
            RWFrame frame = null;

            if (!map.TryGetValue(pageid, out frame))
            {
                frame = new RWFrame(pageid);
                map[pageid] = frame;
            }
            if (!frame.Resident)
            {
                frame.DataSlotId = pool.AllocSlot();
            }

            data.CopyTo(pool[frame.DataSlotId], 0);
            frame.Dirty = true;

            //////////////////////////////////////////////////////

            readList.updateFrame(frame, true);
            writeList.updateFrame(frame, true);
        }
Exemplo n.º 3
0
 private void updateFrameNode(RWFrame frame, bool isWriteQueue, bool isWriteOperation, LinkedListNode<RWQuery> node)
 {
     if (isWriteQueue)
     {
         if (isWriteOperation)
         {
             frame.NodeOfWriteInWriteQueue = node;
         }
         else
         {
             frame.NodeOfReadInWriteQueue = node;
         }
     }
     else
     {
         if (isWriteOperation)
         {
             frame.NodeOfWriteInReadQueue = node;
         }
         else
         {
             frame.NodeOfReadInReadQueue = node;
         }
     }
 }
Exemplo n.º 4
0
 private LinkedListNode<RWQuery> getNode(RWFrame frame, bool isWriteQueue, bool isWriteOperation)
 {
     if (isWriteQueue)
     {
         if (isWriteOperation)
         {
             return frame.NodeOfWriteInWriteQueue;
         }
         else
         {
             return frame.NodeOfReadInWriteQueue;
         }
     }
     else
     {
         if (isWriteOperation)
         {
             return frame.NodeOfWriteInReadQueue;
         }
         else
         {
             return frame.NodeOfReadInReadQueue;
         }
     }
 }
Exemplo n.º 5
0
 public LinkedListNode<RWQuery> updateFrame(RWFrame frame, bool isWrite)
 {
     if (getNode(frame, isWriteQueue, isWrite) == null)
     {
         return Enqueue(frame, isWrite);
     }
     else
     {
         return AccessFrame(frame, isWrite);
     }
 }
Exemplo n.º 6
0
 public LinkedListNode<RWQuery> Enqueue(RWFrame frame, bool isWrite)
 {
     LinkedListNode<RWQuery> newNode = queue.AddFirst(new RWQuery(frame.Id, isWrite));
     updateFrameNode(frame, isWriteQueue, isWrite, newNode);
     return newNode;
 }
Exemplo n.º 7
0
            public LinkedListNode<RWQuery> AccessFrame(RWFrame frame, bool isWrite)
            {
                LinkedListNode<RWQuery> node = getNode(frame, isWriteQueue, isWrite);

                queue.Remove(node);
                LinkedListNode<RWQuery> newNode = queue.AddFirst(new RWQuery(frame.Id, isWrite));
                updateFrameNode(frame, isWriteQueue, node.Value.Type == AccessType.Write, newNode);

                return newNode;
            }