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); }
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); }
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)); }
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)}"; }
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); } }
private static byte[,] ReadMap(this BinaryReader reader) { byte[] data = reader.ReadBytes(w * h); return(BinaryConversion.ToColorRectangle(data, h, w)); }
private static void ReadMap(this BinaryReader reader) { byte[] data = reader.ReadBytes(w * h); initialMapState = BinaryConversion.ToColorRectangle(data, h, w); }
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; } } }