Пример #1
0
 public string AddToDisk(IDisc discelements)
 {
     DiscsElements.Add(discelements);
     if (DiscsElements.Count > _count)
     {
         return("On disk may be saved <20 elements");
     }
     return("On disk saved " + DiscsElements.Count);
 }
Пример #2
0
 private void ReconnectDown(IDisc disk)
 {
     Parallel.ForEach(disk.Nodes, node =>
     {
         var outsideNode = node.ConnectedNodes.First(n => n.Parent != node.Parent);
         Node.Disconnect(node, outsideNode);
         Node.Connect(node, (INode)outsideNode.Previous);
     });
 }
 static private ulong discDiff(IDisc disc, int[] lengths)
 {
     if (disc == null || lengths == null || disc.Offsets.Count != lengths.Length)
     {
         return(UInt64.MaxValue);
     }
     return(disc.Offsets.Zip(disc.Offsets.Skip(1), (c, n) => n - c).Concat(new int[1] {
         disc.Sectors - disc.Offsets.LastOrDefault()
     }).Zip(lengths).Aggregate(0UL, (s, v) => { ulong d = (ulong)(v.First - v.Second); s += d * d; return s; }));
 }
Пример #4
0
        //-------------- Rotinas

        public DiscReader(IDisc disc)
        {
            this.disc = (Disc)disc;
            device    = this.disc.device;
            context   = IOManager.CreateIOContext(this.device.Name + disc.Code, this.device.device.Path,
                                                  FileAccess.ReadWrite, FileShare.None, 0, FileMode.Open, EFileAttributes.NoBuffering);

            Lock();
            Seek(0);
            Unlock();
        }
Пример #5
0
        public static void Connect(IDisc disc1, IDisc disc2)
        {
            if (disc1.Nodes.Count != disc2.Nodes.Count)
            {
                throw new Exception("Your discs dont have the same number of connections!");
            }

            for (int i = 0; i < disc1.Nodes.Count; i++)
            {
                Node.Connect(disc1.Nodes[i], disc2.Nodes[i]);
            }
        }
Пример #6
0
        public void PlaceDisc(IDisc disc)
        {
            if (CurrentNumberOfDiscs >= MaxDiscs)
            {
                throw new InvalidOperationException("This peg is full");
            }

            if (TopDisc != null &&
                TopDisc.Size <= disc.Size)
            {
                throw new InvalidOperationException("Cannot place bigger disc on top of smaller disc");
            }

            _discs.Add(disc);
        }
Пример #7
0
 public HeadMovingDiscState(IDisc disc) : base(disc)
 {
 }
 static private bool discMatch(IDisc disc, int[] lengths)
 {
     return(disc.Offsets.Zip(disc.Offsets.Skip(1), (c, n) => n - c).Concat(new int[1] {
         disc.Sectors - disc.Offsets.LastOrDefault()
     }).SequenceEqual(lengths));
 }
Пример #9
0
 public RequestHandlingDiscState(IDisc disc) : base(disc)
 {
 }
Пример #10
0
 public DoubleSidedDisc(int numberOfConnections)
 {
     this.LeftDisc  = new Disc(numberOfConnections);
     this.RightDisc = new Disc(numberOfConnections);
 }
Пример #11
0
 protected AbstractDiscState(IDisc disc)
 {
     Disc = disc;
 }