mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2025-09-13 20:43:19 +00:00
ش
This commit is contained in:
@@ -41,44 +41,45 @@ public static class Codec
|
|||||||
|
|
||||||
//delegate AsyncReply AsyncParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence);
|
//delegate AsyncReply AsyncParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence);
|
||||||
|
|
||||||
delegate object SyncParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence);
|
delegate object AsyncParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence);
|
||||||
|
delegate object SyncParser(byte[] data, uint offset, uint length);
|
||||||
|
|
||||||
static SyncParser[][] FixedParsers = new SyncParser[][]
|
static AsyncParser[][] FixedAsyncParsers = new AsyncParser[][]
|
||||||
{
|
{
|
||||||
new SyncParser[]{
|
new AsyncParser[]{
|
||||||
DataDeserializer.NullParser,
|
DataDeserializer.NullParser,
|
||||||
DataDeserializer.BooleanFalseParser,
|
DataDeserializer.BooleanFalseParser,
|
||||||
DataDeserializer.BooleanTrueParser,
|
DataDeserializer.BooleanTrueParser,
|
||||||
DataDeserializer.NotModifiedParser,
|
DataDeserializer.NotModifiedParser,
|
||||||
},
|
},
|
||||||
new SyncParser[]{
|
new AsyncParser[]{
|
||||||
DataDeserializer.ByteParser,
|
DataDeserializer.ByteParser,
|
||||||
DataDeserializer.SByteParser,
|
DataDeserializer.SByteParser,
|
||||||
DataDeserializer.Char8Parser,
|
DataDeserializer.Char8Parser,
|
||||||
DataDeserializer.LocalResourceParser8,
|
DataDeserializer.LocalResourceParser8,
|
||||||
DataDeserializer.ResourceParser8,
|
DataDeserializer.ResourceParser8,
|
||||||
},
|
},
|
||||||
new SyncParser[]{
|
new AsyncParser[]{
|
||||||
DataDeserializer.Int16Parser,
|
DataDeserializer.Int16Parser,
|
||||||
DataDeserializer.UInt16Parser,
|
DataDeserializer.UInt16Parser,
|
||||||
DataDeserializer.Char16Parser,
|
DataDeserializer.Char16Parser,
|
||||||
DataDeserializer.LocalResourceParser16,
|
DataDeserializer.LocalResourceParser16,
|
||||||
DataDeserializer.ResourceParser16,
|
DataDeserializer.ResourceParser16,
|
||||||
},
|
},
|
||||||
new SyncParser[]{
|
new AsyncParser[]{
|
||||||
DataDeserializer.Int32Parser,
|
DataDeserializer.Int32Parser,
|
||||||
DataDeserializer.UInt32Parser,
|
DataDeserializer.UInt32Parser,
|
||||||
DataDeserializer.Float32Parser,
|
DataDeserializer.Float32Parser,
|
||||||
DataDeserializer.LocalResourceParser32,
|
DataDeserializer.LocalResourceParser32,
|
||||||
DataDeserializer.ResourceParser32,
|
DataDeserializer.ResourceParser32,
|
||||||
},
|
},
|
||||||
new SyncParser[]{
|
new AsyncParser[]{
|
||||||
DataDeserializer.Int64Parser,
|
DataDeserializer.Int64Parser,
|
||||||
DataDeserializer.UInt64Parser,
|
DataDeserializer.UInt64Parser,
|
||||||
DataDeserializer.Float64Parser,
|
DataDeserializer.Float64Parser,
|
||||||
DataDeserializer.DateTimeParser,
|
DataDeserializer.DateTimeParser,
|
||||||
},
|
},
|
||||||
new SyncParser[]
|
new AsyncParser[]
|
||||||
{
|
{
|
||||||
DataDeserializer.Int128Parser, // int 128
|
DataDeserializer.Int128Parser, // int 128
|
||||||
DataDeserializer.UInt128Parser, // uint 128
|
DataDeserializer.UInt128Parser, // uint 128
|
||||||
@@ -86,7 +87,7 @@ public static class Codec
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static SyncParser[] DynamicParsers = new SyncParser[]
|
static AsyncParser[] DynamicAsyncParsers = new AsyncParser[]
|
||||||
{
|
{
|
||||||
DataDeserializer.RawDataParser,
|
DataDeserializer.RawDataParser,
|
||||||
DataDeserializer.StringParser,
|
DataDeserializer.StringParser,
|
||||||
@@ -95,7 +96,7 @@ public static class Codec
|
|||||||
DataDeserializer.RecordListParser,
|
DataDeserializer.RecordListParser,
|
||||||
};
|
};
|
||||||
|
|
||||||
static SyncParser[] TypedParsers = new SyncParser[]
|
static AsyncParser[] TypedAsyncParsers = new AsyncParser[]
|
||||||
{
|
{
|
||||||
DataDeserializer.RecordParser,
|
DataDeserializer.RecordParser,
|
||||||
DataDeserializer.TypedListParser,
|
DataDeserializer.TypedListParser,
|
||||||
@@ -136,19 +137,50 @@ public static class Codec
|
|||||||
|
|
||||||
if (tt.Class == TransmissionTypeClass.Fixed)
|
if (tt.Class == TransmissionTypeClass.Fixed)
|
||||||
{
|
{
|
||||||
return (len, FixedParsers[tt.Exponent][tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength, connection, requestSequence));
|
return (len, FixedAsyncParsers[tt.Exponent][tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength, connection, requestSequence));
|
||||||
}
|
}
|
||||||
else if (tt.Class == TransmissionTypeClass.Dynamic)
|
else if (tt.Class == TransmissionTypeClass.Dynamic)
|
||||||
{
|
{
|
||||||
return (len, DynamicParsers[tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength, connection, requestSequence));
|
return (len, DynamicAsyncParsers[tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength, connection, requestSequence));
|
||||||
}
|
}
|
||||||
else //if (tt.Class == TransmissionTypeClass.Typed)
|
else //if (tt.Class == TransmissionTypeClass.Typed)
|
||||||
{
|
{
|
||||||
return (len, TypedParsers[tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength, connection, requestSequence));
|
return (len, TypedAsyncParsers[tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength, connection, requestSequence));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static (uint, object) ParseSync(byte[] data, uint offset, TransmissionType? dataType = null)
|
||||||
|
{
|
||||||
|
uint len = 0;
|
||||||
|
|
||||||
|
if (dataType == null)
|
||||||
|
{
|
||||||
|
(var longLen, dataType) = TransmissionType.Parse(data, offset, (uint)data.Length);
|
||||||
|
|
||||||
|
if (dataType == null)
|
||||||
|
throw new NullReferenceException("DataType can't be parsed.");
|
||||||
|
|
||||||
|
len = (uint)longLen;
|
||||||
|
offset = dataType.Value.Offset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
len = (uint)dataType.Value.ContentLength;
|
||||||
|
|
||||||
|
var tt = dataType.Value;
|
||||||
|
|
||||||
|
if (tt.Class == TransmissionTypeClass.Fixed)
|
||||||
|
{
|
||||||
|
return (len, FixedParsers[tt.Exponent][tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength));
|
||||||
|
}
|
||||||
|
else if (tt.Class == TransmissionTypeClass.Dynamic)
|
||||||
|
{
|
||||||
|
return (len, DynamicParsers[tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength));
|
||||||
|
}
|
||||||
|
else //if (tt.Class == TransmissionTypeClass.Typed)
|
||||||
|
{
|
||||||
|
return (len, TypedParsers[tt.Index](data, dataType.Value.Offset, (uint)tt.ContentLength));
|
||||||
|
}
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Check if a resource is local to a given connection.
|
/// Check if a resource is local to a given connection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -208,21 +240,21 @@ public static class Codec
|
|||||||
[typeof(string)] = DataSerializer.StringComposer,
|
[typeof(string)] = DataSerializer.StringComposer,
|
||||||
|
|
||||||
// Special
|
// Special
|
||||||
[typeof(object[])] = DataSerializer.ListComposer,// DataSerializer.ListComposerFromArray,
|
[typeof(object[])] = DataSerializer.ListComposer,
|
||||||
[typeof(List<object>)] = DataSerializer.ListComposer,// DataSerializer.ListComposerFromList,
|
[typeof(List<object>)] = DataSerializer.ListComposer,
|
||||||
[typeof(VarList<object>)] = DataSerializer.ListComposer,// DataSerializer.ListComposerFromList,
|
[typeof(VarList<object>)] = DataSerializer.ListComposer,
|
||||||
[typeof(IResource[])] = DataSerializer.ResourceListComposer,// (value, con) => (TransmissionTypeIdentifier.ResourceList, DC.ToBytes((decimal)value)),
|
[typeof(IResource[])] = DataSerializer.ResourceListComposer,
|
||||||
[typeof(IResource?[])] = DataSerializer.ResourceListComposer,// (value, con) => (TransmissionTypeIdentifier.ResourceList, DC.ToBytes((decimal)value)),
|
[typeof(IResource?[])] = DataSerializer.ResourceListComposer,
|
||||||
[typeof(List<IResource>)] = DataSerializer.ResourceListComposer, //(value, con) => (TransmissionTypeIdentifier.ResourceList, DC.ToBytes((decimal)value)),
|
[typeof(List<IResource>)] = DataSerializer.ResourceListComposer,
|
||||||
[typeof(List<IResource?>)] = DataSerializer.ResourceListComposer, //(value, con) => (TransmissionTypeIdentifier.ResourceList, DC.ToBytes((decimal)value)),
|
[typeof(List<IResource?>)] = DataSerializer.ResourceListComposer,
|
||||||
[typeof(VarList<IResource>)] = DataSerializer.ResourceListComposer, //(value, con) => (TransmissionTypeIdentifier.ResourceList, DC.ToBytes((decimal)value)),
|
[typeof(VarList<IResource>)] = DataSerializer.ResourceListComposer,
|
||||||
[typeof(VarList<IResource?>)] = DataSerializer.ResourceListComposer, //(value, con) => (TransmissionTypeIdentifier.ResourceList, DC.ToBytes((decimal)value)),
|
[typeof(VarList<IResource?>)] = DataSerializer.ResourceListComposer,
|
||||||
[typeof(IRecord[])] = DataSerializer.RecordListComposer,// (value, con) => (TransmissionTypeIdentifier.RecordList, DC.ToBytes((decimal)value)),
|
[typeof(IRecord[])] = DataSerializer.RecordListComposer,
|
||||||
[typeof(IRecord?[])] = DataSerializer.RecordListComposer,// (value, con) => (TransmissionTypeIdentifier.RecordList, DC.ToBytes((decimal)value)),
|
[typeof(IRecord?[])] = DataSerializer.RecordListComposer,
|
||||||
[typeof(List<IRecord>)] = DataSerializer.RecordListComposer, //(value, con) => (TransmissionTypeIdentifier.RecordList, DC.ToBytes((decimal)value)),
|
[typeof(List<IRecord>)] = DataSerializer.RecordListComposer,
|
||||||
[typeof(List<IRecord?>)] = DataSerializer.RecordListComposer, //(value, con) => (TransmissionTypeIdentifier.RecordList, DC.ToBytes((decimal)value)),
|
[typeof(List<IRecord?>)] = DataSerializer.RecordListComposer,
|
||||||
[typeof(VarList<IRecord>)] = DataSerializer.RecordListComposer, //(value, con) => (TransmissionTypeIdentifier.RecordList, DC.ToBytes((decimal)value)),
|
[typeof(VarList<IRecord>)] = DataSerializer.RecordListComposer,
|
||||||
[typeof(VarList<IRecord?>)] = DataSerializer.RecordListComposer, //(value, con) => (TransmissionTypeIdentifier.RecordList, DC.ToBytes((decimal)value)),
|
[typeof(VarList<IRecord?>)] = DataSerializer.RecordListComposer,
|
||||||
[typeof(Map<object, object>)] = DataSerializer.MapComposer,
|
[typeof(Map<object, object>)] = DataSerializer.MapComposer,
|
||||||
[typeof(Map<object?, object>)] = DataSerializer.MapComposer,
|
[typeof(Map<object?, object>)] = DataSerializer.MapComposer,
|
||||||
[typeof(Map<object, object?>)] = DataSerializer.MapComposer,
|
[typeof(Map<object, object?>)] = DataSerializer.MapComposer,
|
||||||
|
@@ -14,83 +14,168 @@ namespace Esiur.Data;
|
|||||||
|
|
||||||
public static class DataDeserializer
|
public static class DataDeserializer
|
||||||
{
|
{
|
||||||
public static object NullParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object NullParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object BooleanTrueParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object NullParser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object BooleanTrueParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object BooleanFalseParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object BooleanTrueParser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object BooleanFalseParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object NotModifiedParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object BooleanFalseParser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object NotModifiedParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
return NotModified.Default;
|
return NotModified.Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object ByteParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object NotModifiedParser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
return NotModified.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object UInt8ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
return data[offset];
|
return data[offset];
|
||||||
}
|
}
|
||||||
public static object SByteParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object UInt8Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
return data[offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object Int8ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
return (sbyte)data[offset];
|
return (sbyte)data[offset];
|
||||||
}
|
}
|
||||||
public static unsafe object Char16Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static object Int8Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
return (sbyte)data[offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object Char16ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(char*)ptr;
|
return *(char*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object Char8Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object Char16Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(char*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object Char8ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
|
{
|
||||||
|
return (char)data[offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object Char8Parser(byte[] data, uint offset, uint length)
|
||||||
{
|
{
|
||||||
return (char)data[offset];
|
return (char)data[offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static unsafe object Int16Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object Int16ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(short*)ptr;
|
return *(short*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static unsafe object UInt16Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object Int16Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(short*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object UInt16ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(ushort*)ptr;
|
return *(ushort*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static unsafe object Int32Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object UInt16Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(ushort*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object Int32ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(int*)ptr;
|
return *(int*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static unsafe object UInt32Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object Int32Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(int*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object UInt32ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(uint*)ptr;
|
return *(uint*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static unsafe object Float32Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object UInt32Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(uint*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static unsafe object Float32ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(float*)ptr;
|
return *(float*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static unsafe object Float64Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object Float32Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(float*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object Float64ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(double*)ptr;
|
return *(double*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static unsafe object Float128Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object Float64Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(double*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static unsafe object Float128ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(decimal*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object Float128Parser(byte[] data, uint offset, uint length)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(decimal*)ptr;
|
return *(decimal*)ptr;
|
||||||
@@ -102,26 +187,51 @@ public static class DataDeserializer
|
|||||||
return *(decimal*)ptr;
|
return *(decimal*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static unsafe object Int128ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
public static unsafe object UInt128Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(decimal*)ptr;
|
return *(decimal*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static unsafe object Int64Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object UInt128ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(decimal*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object UInt128Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(decimal*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe object Int64ParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(long*)ptr;
|
return *(long*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static unsafe object Int64Parser(byte[] data, uint offset, uint length)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return *(long*)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static unsafe object UInt64Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object UInt64Parser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
return *(ulong*)ptr;
|
return *(ulong*)ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static unsafe object DateTimeParserAsync(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
|
{
|
||||||
|
fixed (byte* ptr = &data[offset])
|
||||||
|
return new DateTime(*(long*)ptr, DateTimeKind.Utc);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static unsafe object DateTimeParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
public static unsafe object DateTimeParser(byte[] data, uint offset, uint length, DistributedConnection connection, uint[] requestSequence)
|
||||||
{
|
{
|
||||||
fixed (byte* ptr = &data[offset])
|
fixed (byte* ptr = &data[offset])
|
||||||
|
Reference in New Issue
Block a user