/*public byte[] CheckRevSyntax(byte[] data) * { * bool status = false; * int capsuleSize = data.Length; * * * byte[] InfactData = new byte[capsuleSize-capsulationConstants.Count]; * * try * { * for(int i = 0; i < capsuleSize; i++) * { * if(data[i].) * * * } * * * * * if (data[0] == ComTitles.Head)// first head check * { * if (data[1] == (byte)(size - NumberOfConst))//infact data size check * { * if (data[2] == ComTitles.Head)// second head check * { * if (data[size - 1] == ComTitles.End)//end check * { * * Array.Copy(data, 3, InfactData, 0, (size - NumberOfConst)); * byte checkSum = ComputeAdditionChecksum(InfactData); * if (data[size - 2] == checkSum) * { * * Console.WriteLine("Infact package content:"); * } * * } * } * } * } * * * } * catch (Exception ex) * { * * Console.WriteLine(ex); * } * * return InfactData; * /**/ //} public byte[] CheckSyntax(byte[] capsule) { byte[] infactData = new byte[capsule.Length - capsulationConstants.Count]; byte[] capsuleClone = new byte[capsule.Length]; Array.Copy(capsule, capsuleClone, capsule.Length); Stack <CapsuleConstant> capsuleConstantsClone = StackClone <CapsuleConstant>(capsulationConstants); bool status = false; do { CapsuleConstant constant = capsuleConstantsClone.Pop(); if (constant.Head) { if (capsuleClone[constant.Position] == constant.Val) { status = true; } else { status = false; } } else { if (capsuleClone[(capsuleClone.Length - 1) - constant.Position] == constant.Val) { status = true; } else { status = false; } } }while (capsuleConstantsClone.Count() != 0 && status); if (status) { CapsuleConstant maxHead = (from x in capsulationConstants where x.Head == true select x).Max(); //CapsuleConstant maxNonHead = (from x in capsulationConstants where x.Head != true select x).Max(); Array.Copy(capsuleClone, maxHead.Position + 1, infactData, 0, infactData.Length); } else { infactData = null; } return(infactData); }
public byte[] ConvertToSyntax(byte[] infactData) { Stack <CapsuleConstant> capsuleConstantsClone = StackClone <CapsuleConstant>(capsulationConstants); int capsuleSize = infactData.Length + capsuleConstantsClone.Count; byte[] capsule = new byte[capsuleSize]; //[10] length=10, max[9] /*foreach(CapsuleConstant c in capsulationConstants) * { * CapsuleConstant constant= capsulationConstants.Pop();//constant.val=5, position=2, head=true * if (constant.Head) * { * capsule[constant.Position] = constant.Val; * } * else * { * capsule[(capsule.Length - 1) - constant.Position] = constant.Val; * } * * }*/ while (capsuleConstantsClone.Count != 0) { CapsuleConstant constant = capsuleConstantsClone.Pop();//constant.val=5, position=2, head=true if (constant.Head) { capsule[constant.Position] = constant.Val; } else { capsule[(capsule.Length - 1) - constant.Position] = constant.Val; } } /*int infactStartPosition = Array.IndexOf(capsule, null);*/ //TODO add overload for stack to stack, create array to stack //CapsuleConstant maxHead = (from x in capsulationConstants where x.Head = true select x).Max(); //CapsuleConstant maxHead = capsulationConstants.MaxBy(); /*WORKING COMPARISON APPROACH* * * CapsuleConstant maxHead = capsulationConstants.OrderByDescending(x => x.Position).First(); * */ /* WORKING COMPARISON 2 * * CapsuleConstant maxHead = (from x in capsulationConstants where x.Head = true select x).Max(); */ CapsuleConstant maxHead = (from x in capsulationConstants where x.Head == true select x).Max(); Console.WriteLine("maxHead is=" + maxHead.Head + " " + maxHead.Position); Array.Copy(infactData, 0, capsule, maxHead.Position + 1, infactData.Length); /* * OLD * int size = infactData.Length; * byte[] encodedData = new byte[size + 5]; * * encodedData[0] = ComTitles.Head; * encodedData[1] = (byte)size; * encodedData[2] = ComTitles.Head; * Array.Copy(infactData, 0, encodedData, 3, size); * encodedData[encodedData.Length - 1] = ComTitles.End; * encodedData[encodedData.Length - 2] = ComputeAdditionChecksum(infactData); */ return(capsule); }