Ejemplo n.º 1
0
        protected override void increment(ref uint[] enumeratedEncoding, out bool isLengthCompleted)
        {
            isLengthCompleted = false;

            // special case
            if (enumeratedEncoding.Length == 0)
            {
                isLengthCompleted = true;
                return;
            }

            bool[] enumeratedEncodingAsBool = translateEnumeratedEncodingToInstructionMask(enumeratedEncoding);
            int    asNumber = BinaryConversion.base2ToInt(enumeratedEncodingAsBool);

            asNumber++;
            bool[] incrementedAsBase2 = BinaryConversion.intToBase2(asNumber, enumeratedEncoding.Length);
            bool   isWraparound       = incrementedAsBase2.All(v => !v); // check if all are false

            if (isWraparound)
            {
                isLengthCompleted = true;
                return;
            }

            enumeratedEncoding = convToUint(incrementedAsBase2);
        }
Ejemplo n.º 2
0
        public void DownloadChunks()
        {
            logger.LogTechState("Downloading chunk data...");
            const int maxFails = 5;

            Parallel.ForEach(chunks, chunkXY =>
            {
                int fails;
                bool success = false;
                do
                {
                    fails = 0;
                    try
                    {
                        logger.LogDebug($"DownloadChunks(): chunk {chunkXY}");
                        byte[] data = GetChunkData(chunkXY, (byte)canvas);
                        BinaryConversion.DropPixelProtectionInfo(data);
                        SaveChunk(chunkXY, data);
                        success = true;
                    }
                    catch (Exception ex)
                    {
                        logger.LogDebug($"DownloadChunks(): error - {ex}");
                        if (++fails == maxFails)
                        {
                            fails = 0;
                            Thread.Sleep(TimeSpan.FromSeconds(30));
                            break;
                        }
                    }
                } while (!success);
            });
            logger.LogTechInfo("Chunk data is downloaded");
            OnMapUpdated?.Invoke(this, null);
        }
Ejemplo n.º 3
0
        private static FileStream SaveInitialMapState()
        {
            const byte version = 1;
            DateTime   now     = DateTime.Now;

            cache.DownloadChunks();
            byte[] mapBytes = BinaryConversion.GetRectangle(cache, options.LeftX, options.TopY, options.RightX, options.BottomY);
            using (FileStream fileStream = File.Open(options.FileName, FileMode.Create, FileAccess.Write))
            {
                using (BinaryWriter writer = new BinaryWriter(fileStream))
                {
                    writer.Write(version);
                    writer.Write((byte)options.Canvas);
                    writer.Write(options.LeftX);
                    writer.Write(options.TopY);
                    writer.Write(options.RightX);
                    writer.Write(options.BottomY);
                    writer.Write(now.ToBinary());
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        using (DeflateStream compressionStream = new DeflateStream(memoryStream, CompressionLevel.Optimal, true))
                        {
                            compressionStream.Write(mapBytes, 0, mapBytes.Length);
                        }
                        writer.Write(memoryStream.Length);
                        memoryStream.Seek(0, SeekOrigin.Begin);
                        memoryStream.CopyTo(fileStream);
                    }
                }
            }
            logger.Log("Chunk data is saved to file", MessageGroup.TechInfo);
            return(new FileStream(options.FileName, FileMode.Open, FileAccess.Read, FileShare.None));
        }
Ejemplo n.º 4
0
        internal override void WriteToString(StringWriter writer)
        {
            int fromBase = OriginalRepresentation == DataStringLiteralBinaryRepresentation.Binary ? 2 :
                           OriginalRepresentation == DataStringLiteralBinaryRepresentation.Octal ? 4 :
                           OriginalRepresentation == DataStringLiteralBinaryRepresentation.Hexadecimal ? 16 : 0;

            writer.Content += $"{BinaryConversion.ToRepresentation(Value, fromBase)}";
        }
Ejemplo n.º 5
0
        internal static new bool ReadFromString(StringScanner scanner, out DataStringItem item)
        {
            using (var token = scanner.SaveIndex())
            {
                if (scanner.CurrentChar == '0')
                {
                    scanner.Increment();

                    bool literalIsBinary      = scanner.CurrentChar == 'b',
                         literalIsHexadecimal = scanner.CurrentChar == 'x';

                    if (literalIsBinary || literalIsHexadecimal)
                    {
                        scanner.Increment();
                    }

                    using (var repStrToken = scanner.SaveIndex())
                    {
                        while (literalIsBinary && GlobalConsts.BINARY_CHARSET.Contains(scanner.CurrentChar) ||
                               literalIsHexadecimal && GlobalConsts.HEXADECIMAL_CHARSET.Contains(scanner.CurrentChar) ||
                               !(literalIsHexadecimal || literalIsHexadecimal) && GlobalConsts.OCTAL_CHARSET.Contains(scanner.CurrentChar))
                        {
                            scanner.Increment();
                        }

                        string repStr = scanner.GetString(repStrToken);

                        if (repStr.Length > 0)
                        {
                            if (literalIsBinary)
                            {
                                item = new DataStringLiteralBinary(BinaryConversion.FromRepresentation(repStr, 2),
                                                                   DataStringLiteralBinaryRepresentation.Binary);
                            }
                            else if (literalIsHexadecimal)
                            {
                                item = new DataStringLiteralBinary(BinaryConversion.FromRepresentation(repStr, 16),
                                                                   DataStringLiteralBinaryRepresentation.Hexadecimal);
                            }
                            else
                            {
                                item = new DataStringLiteralBinary(BinaryConversion.FromRepresentation(repStr, 8),
                                                                   DataStringLiteralBinaryRepresentation.Octal);
                            }

                            return(true);
                        }
                    }
                }

                scanner.RestoreIndex(token);
                item = null;
                return(false);
            }
        }
Ejemplo n.º 6
0
 private static byte[,] ReadMap(this BinaryReader reader)
 {
     byte[] data = reader.ReadBytes(w * h);
     return(BinaryConversion.ToColorRectangle(data, h, w));
 }
Ejemplo n.º 7
0
 private static void ReadMap(this BinaryReader reader)
 {
     byte[] data = reader.ReadBytes(w * h);
     initialMapState = BinaryConversion.ToColorRectangle(data, h, w);
 }
Ejemplo n.º 8
0
        static void Main(string[] args)
        {
            //keyBinary k1 = new keyBinary('1', KeyType.Number);
            //keyBinary k2 = new keyBinary('0', KeyType.Number);
            //keyBinary k3 = new keyBinary('1', KeyType.Number);
            //keyBinary k4 = new keyBinary('0', KeyType.Number);

            //BinaryNumber b1 = new BinaryNumber();
            //b1.Add(k1);
            //b1.Add(k2);
            //b1.Add(k3);
            //b1.Add(k4);

            //b1.convertToString();

            //BinaryConversion BC1 = new BinaryConversion(b1);
            //BC1.ToOctal();


            //keyOctal kO1 = new keyOctal('5', KeyType.Number);
            //keyOctal kO2 = new keyOctal('6', KeyType.Number);

            //OctalNumber O1 = new OctalNumber();
            //O1.Add(kO1);
            //O1.Add(kO2);
            //O1.convertToString();

            //OctalConversion OC1 = new OctalConversion(O1);
            //OC1.ToBinary();

            //keyBinary k5 = new keyBinary('1', KeyType.Number);
            //keyBinary k6 = new keyBinary('0', KeyType.Number);
            //keyBinary k7 = new keyBinary('0', KeyType.Number);
            //keyBinary k8 = new keyBinary('0', KeyType.Number);

            //BinaryNumber b2 = new BinaryNumber();
            //b2.Add(k5);
            //b2.Add(k6);
            //b2.Add(k7);
            //b2.Add(k8);

            //b2.convertToString();

            //BinaryOperations BO1 = new BinaryOperations(b1, b2);
            //BO1.Subtraction();

            Screen      Screen1 = new Screen();
            keyOperator KeyOp   = Screen1.PrintOperators();
            NumberType  NumType = Screen1.PrintNumberType();

            Console.WriteLine("{0}", KeyOp.Key);


            switch (KeyOp.keyType)
            {
            case KeyType.Conversion:
            {
                switch (NumType)
                {
                case NumberType.Binary:

                    Console.WriteLine("Enter Binary Number. (press Enter after each digit. Enter 'X' to stop)");

                    BinaryNumber BN = new BinaryNumber();
                    BN.GetNumber();
                    BinaryConversion BC = new BinaryConversion(BN);
                    if (KeyOp.Key == 'M')
                    {
                        BC.ToDecimal();
                    }
                    else if (KeyOp.Key == 'I')
                    {
                        Console.WriteLine("cannot convert binary to binary");
                    }
                    else if (KeyOp.Key == 'O')
                    {
                        BC.ToOctal();
                    }
                    else if (KeyOp.Key == 'H')
                    {
                        BC.ToHexaDecimal();
                    }
                    break;

                case NumberType.Octal:

                    Console.WriteLine("Enter Octal Number. (press Enter after each digit. Enter 'X' to stop)");

                    OctalNumber ON = new OctalNumber();
                    ON.GetNumber();
                    OctalConversion OC = new OctalConversion(ON);
                    if (KeyOp.Key == 'M')
                    {
                        OC.ToDecimal();
                    }
                    else if (KeyOp.Key == 'I')
                    {
                        OC.ToBinary();
                    }
                    else if (KeyOp.Key == 'O')
                    {
                        OC.ToOctal();
                    }
                    else if (KeyOp.Key == 'H')
                    {
                        OC.ToHexaDecimal();
                    }
                    break;
                }
                break;
            }

            case KeyType.Operator:
            {
                switch (NumType)
                {
                case NumberType.Binary:

                    Console.WriteLine("Enter 1st Binary Number. (press Enter after each digit. Enter 'X' to stop");

                    BinaryNumber BN1 = new BinaryNumber();
                    BN1.GetNumber();


                    Console.WriteLine("Enter 2nd Binary Number (press Enter after each digit. Enter 'X' to stop");
                    BinaryNumber BN2 = new BinaryNumber();
                    BN2.GetNumber();
                    BinaryOperations BO = new BinaryOperations(BN1, BN2);
                    //Console.WriteLine("{0}", BN1.number);
                    //Console.WriteLine("{0}", BN2.number);
                    if (KeyOp.Key == '+')
                    {
                        BO.Addition();
                    }
                    else if (KeyOp.Key == '-')
                    {
                        BO.Subtraction();
                    }
                    else if (KeyOp.Key == '*')
                    {
                        Console.WriteLine("Not implemented");
                    }
                    else if (KeyOp.Key == '/')
                    {
                        Console.WriteLine("Not implemented");
                    }


                    break;

                default:
                    break;
                }
                break;
            }
            }
        }