JD2022-TU1/main/tools/framework/JD.Remoting/IBlobExtensions.cs

124 lines
No EOL
3.3 KiB
C#

using System;
using System.Collections.Generic;
namespace JD.Remoting
{
/// <summary>
/// Adds additional helper on the blob so the manipulation is easier.
/// </summary>
public static class BlobExtensions
{
#region Collections
/// <summary>
/// Push a collection to the blob.
/// </summary>
public static void PushCollection<T>(this IBlob blob, ICollection<T> collection, Action<T> serializeValue)
{
blob.Push(collection.Count);
foreach (T elem in collection)
{
serializeValue(elem);
}
}
/// <summary>
/// Adds the content of the blob to the given collection.
/// </summary>
public static void ExtractCollection<T>(this IBlob blob, ICollection<T> collection, Func<T> extractValue)
{
int count = blob.ExtractInt();
for (int i = 0; i < count; i++)
{
collection.Add(extractValue());
}
}
public static void Push(this IBlob blob, ICollection<long> collection)
{
blob.PushCollection(collection, blob.Push);
}
public static void Push(this IBlob blob, ICollection<string> collection)
{
blob.PushCollection(collection, blob.Push);
}
public static void Extract(this IBlob blob, ICollection<long> collection)
{
ExtractCollection(blob, collection, blob.ExtractLong);
}
public static void Extract(this IBlob blob, ICollection<string> collection)
{
ExtractCollection(blob, collection, blob.ExtractString);
}
#endregion
#region Basic Types Inference
// Those methods all to use the blob with the generic type inference IBlob.Extract(ref myObject);
public static void Extract(this IBlob blob, out string value)
{
value = blob.ExtractString();
}
public static void Extract(this IBlob blob, out int value)
{
value = blob.ExtractInt();
}
public static void Extract(this IBlob blob, out uint value)
{
value = blob.ExtractUInt();
}
public static void Extract(this IBlob blob, out long value)
{
value = blob.ExtractLong();
}
public static void Extract(this IBlob blob, out ulong value)
{
value = blob.ExtractULong();
}
public static void Extract(this IBlob blob, out float value)
{
value = blob.ExtractFloat();
}
public static void Extract(this IBlob blob, out double value)
{
value = blob.ExtractDouble();
}
public static void Extract(this IBlob blob, out bool value)
{
value = blob.ExtractBool();
}
public static void ExtractPath(this IBlob blob, out string value)
{
value = blob.ExtractPath();
}
#endregion
#region Enums
public static void ExtractEnum<TEnum>(this IBlob blob, out TEnum @enum)
{
@enum = (TEnum)(object)blob.ExtractInt();
}
public static void PushEnum<TEnum>(this IBlob blob, TEnum @enum)
{
blob.Push((int)(object)@enum);
}
#endregion
}
}