124 lines
No EOL
3.3 KiB
C#
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
|
|
}
|
|
} |