Revise LibAC

This commit is contained in:
Zontreck 2023-09-20 08:29:44 -07:00
parent 60ced631ba
commit c4e7b6fa54
35 changed files with 44 additions and 326 deletions

View file

@ -3,7 +3,7 @@ using System;
using System.Collections.Generic;
using System.Text;
namespace LibZNI
namespace LibAC
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple =false, Inherited =true)]
public class AutoUpdater : Attribute

View file

@ -5,7 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Numerics;
namespace LibZNI
namespace LibAC
{
[Serializable]
public class BigFloat : IComparable, IComparable<BigFloat>, IEquatable<BigFloat>

View file

@ -8,7 +8,7 @@ using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
namespace LibZNI
namespace LibAC
{
public class HTTP
{

View file

@ -1,5 +1,5 @@
using LibZNI.Serialization;
using LibZNI.Serialization.ZNIFile;
using LibAC.Serialization;
using LibAC.Serialization.ACFile;
using System;
using System.Collections.Generic;
using System.IO;
@ -7,7 +7,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI
namespace LibAC
{
public class Hash : Serializable
{

View file

@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Integrity
{
internal class Branch
{
private Leaf lA;
private Leaf lB;
public Branch(Leaf a, Leaf b)
{
lA = a;
lB = b;
}
public byte[] GetNodeHash()
{
byte[] h1 = Tools.SHA256HashBytes(lA.InputBytes);
byte[] h2 = Tools.SHA256HashBytes(lB.InputBytes);
byte[] h3 = new byte[h1.Length + h2.Length];
h1.CopyTo(h3, 0);
h2.CopyTo(h3, h1.Length);
byte[] b = Tools.SHA256HashBytes(Tools.SHA256HashBytes(h3));
return b;
}
public override string ToString()
{
byte[] i = GetNodeHash();
return Tools.Hash2String(i);
}
}
}

View file

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Integrity
{
internal class Leaf
{
public byte[] InputBytes;
public Leaf(byte[] inputBytes)
{
InputBytes = inputBytes;
}
public Leaf(string input)
{
InputBytes = Encoding.UTF8.GetBytes(input);
}
}
}

View file

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Integrity
{
internal class LeafCreationException : Exception
{
public LeafCreationException(string sMsg):base(sMsg)
{
}
}
}

View file

@ -1,88 +0,0 @@

#define MERKLE_VERBOSE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Integrity
{
public class Tree
{
private List<Leaf> Leaves;
public string MasterHash;
public Tree()
{
Leaves = new List<Leaf>();
}
public void NewLeaf(byte[] b = null, string s = null)
{
if(b != null)
{
Leaves.Add(new Leaf(b));
return;
}
if(s != null)
{
Leaves.Add(new Leaf(s));
return;
}
throw new LeafCreationException("New leaf cannot be null!");
}
/// <summary>
/// This process will lock the program up for a few moments while the tree is processed
/// </summary>
public void ProcessTree()
{
List<Branch> branches = new List<Branch>();
if((Leaves.Count % 2) != 0)
{
Leaves.Add(Leaves.Last());
}
for(int i=0;i< Leaves.Count; i += 2)
{
Branch br = new Branch(Leaves[i], Leaves[i+1]);
bool iDo = false;
#if MERKLE_VERBOSE
iDo = true;
#endif
if(iDo)
{
Console.WriteLine($"New Branch: {br}");
}
branches.Add(br);
}
while(branches.Count > 1)
{
if((branches.Count % 2) != 0)
{
branches.Add(branches.Last());
}
Branch[] copy = branches.ToArray();
branches.Clear();
for(int i = 0; i < copy.Length; i += 2)
{
Leaf a = new Leaf(copy[i].GetNodeHash());
Leaf b = new Leaf(copy[i + 1].GetNodeHash());
bool iDo = false;
Branch br = new Branch(a,b);
#if MERKLE_VERBOSE
iDo=true;
#endif
if (iDo)
{
Console.WriteLine($"New Branch: {br}");
}
branches.Add(br);
}
}
MasterHash = branches[0].ToString();
}
}
}

View file

@ -5,7 +5,7 @@ using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI
namespace LibAC
{
public interface IPlugin
{

View file

@ -2,14 +2,14 @@
// All credit for the implementation of this file should go to the fNBT Authors, unless stated otherwise by comment!
using LibZNI.Serialization.ZNIFile;
using LibAC.Serialization.ACFile;
using System;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Text;
namespace LibZNI.Serialization
namespace LibAC.Serialization
{
/// <summary> BinaryReader wrapper that takes care of reading primitives from an NBT stream,
/// while taking care of endianness, string encoding, and skipping. </summary>

View file

@ -1,13 +1,13 @@
// DISCLAIMER: Taken from fNBT to be altered to fit the needs of ZNI NBT
// All credit for the implementation of this file should go to the fNBT Authors, unless stated otherwise by comment!
using LibZNI.Serialization.ZNIFile;
using LibAC.Serialization.ACFile;
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Text;
namespace LibZNI.Serialization
namespace LibAC.Serialization
{
/// <summary> BinaryWriter wrapper that writes NBT primitives to a stream,
/// while taking care of endianness and string encoding, and counting bytes written. </summary>

View file

@ -1,11 +1,11 @@
using LibZNI.Serialization.ZNIFile;
using LibAC.Serialization.ACFile;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization
namespace LibAC.Serialization
{
public abstract class Serializable
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization
namespace LibAC.Serialization
{
public static class SerializingHelper
{

View file

@ -1,4 +1,4 @@
using LibZNI.Serialization.ZNIFile;
using LibAC.Serialization.ACFile;
using System;
using System.Collections.Generic;
using System.IO;
@ -7,7 +7,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization
namespace LibAC.Serialization
{
/// <summary>
/// This class contains helper functions for interacting with streams and files that are encoded using ZNIFile's structure

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class BoolTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class ByteArrayTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class ByteTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class DoubleTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class FloatTag : Tag
{

View file

@ -9,7 +9,7 @@ using System.Reflection.Metadata.Ecma335;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class Folder : Tag, ICollection<Tag>, ICollection
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class IntArrayTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class IntTag : Tag
{

View file

@ -7,7 +7,7 @@ using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class ListTag : Tag, IList<Tag>, IList
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class LongArrayTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class LongTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class ShortTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class StringTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public abstract class Tag : ICloneable, IComparable<Tag>
{

View file

@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
// Aria: Changed to a type of byte which keeps it to only one byte when writing out in serializing
public enum TagType : byte

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class UUIDTag : Tag
{

View file

@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
namespace LibAC.Serialization.ACFile
{
public class uLongTag : Tag
{

View file

@ -9,7 +9,7 @@ using System.Text;
using System.Xml;
using Newtonsoft.Json;
namespace LibZNI
namespace LibAC
{
public static class ConfigLocation
@ -291,6 +291,13 @@ namespace LibZNI
return tmp._key;
}
public static string ZHS(string ToHash, int len)
{
ZHash tmp = ZHash.Bytes2Hash(new byte[len]);
tmp.CalculateKey(ToHash);
return tmp._key;
}
public static string ZSR(string ToSerialize)
{
ZHash tmp = new ZHash();

View file

@ -1,5 +1,5 @@
using LibZNI.Serialization;
using LibZNI.Serialization.ZNIFile;
using LibAC.Serialization;
using LibAC.Serialization.ACFile;
using System;
using System.Collections.Generic;
using System.Linq;
@ -7,7 +7,7 @@ using System.Runtime;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI
namespace LibAC
{
public class VersionNumberDifferentException : Exception
{

View file

@ -1,36 +0,0 @@
using LibZNI.Serialization;
using LibZNI.Serialization.ZNIFile;
using System.IO;
/// <summary>
/// RAM-like memory
/// Memory is regularly saved to a temporary file called VM.RAM
/// The memory in this class should only be used for temporary persistance between tasks. It should be assumed that this data will purge every restart.
/// </summary>
namespace LibZNI
{
public class VolatileMemory : Serializable
{
public static Folder Memory = new Folder("MEM");
public override void save(Folder f)
{
f.Add(VolatileMemory.Memory);
}
public override void load(Folder f)
{
VolatileMemory.Memory = f["MEM"] as Folder;
}
public void FullSave()
{
Folder f = new Folder("root");
save(f);
TagIO.SaveToFile(ConfigLocation.GetPath()+".volatile", f);
}
}
}

90
ZMap.cs
View file

@ -1,90 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI
{
public class VectorList<T, T2, V> : IComparable
{
public T Key { get; set; }
public T2 Key2 { get; set; }
public V Value { get; set; }
public VectorList(T x, T2 b, V c)
{
Key = x;
Key2 = b;
Value = c;
}
public int CompareTo(object obj)
{
if(obj == null)
{
return -1;
}
VectorList<T, T2, V> _other = obj as VectorList<T, T2, V>;
if (Key.Equals(_other.Key))
{
if (Key2.Equals(_other.Key2))
{
if (Value.Equals(_other.Value))
{
return 0;
}
}
}
return 1;
}
}
public class ZMap<T,T2,V> : IEnumerable<VectorList<T, T2, V>>
{
public List<VectorList<T, T2, V>> _list = new List<VectorList<T, T2, V>>();
public void Add(VectorList<T,T2,V> item)
{
if(!_list.Contains(item))
_list.Add(item);
}
public void Remove(VectorList<T,T2,V> item)
{
_list.Remove(item);
}
public V GetEntry(T a, T2 b)
{
try
{
return _list.First(x => x.Key.Equals(a) && x.Key2.Equals(b)).Value;
}
catch
{
return default(V);
}
}
public T2 GetK2(T a , V b)
{
try
{
return _list.First(x => x.Key.Equals(a) && x.Value.Equals(b)).Key2;
}catch
{
return default(T2);
}
}
public IEnumerator<VectorList<T, T2, V>> GetEnumerator()
{
return _list.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}