Skip to content
/ BLOB Public

Standalone library to build BLOB for both Unity.Entities and .NET

License

Notifications You must be signed in to change notification settings

quabug/BLOB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NuGet Badge openupm

BLOB

Standalone library to build BLOB for both Unity.Entities and .NET.

Usage

Builder

BLOB Type com.quabug.BLOB Unity.Entities

int

var builder = new ValueBuilder<int>(1);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value, Is.EqualTo(1));
var builder = new BlobBuilder(Allocator.Temp);
builder.ConstructRoot<int>() = 1;
var blob = builder.CreateBlobAssetReference<int>(Allocator.Temp);
Assert.That(blob.Value, Is.EqualTo(1));

BlobArray<int>

var builder = new ArrayBuilder<int>(new [] { 1, 2, 3 });
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.ToArray(), Is.EquivalentTo(new[]{1,2,3}));
var builder = new BlobBuilder(Allocator.Temp);
ref var intArray = ref builder.ConstructRoot<BlobArray<int>>();
var intArrayBuilder = builder.Allocate(ref intArray, 3);
for (var i = 0; i < 3; i++) intArrayBuilder[i] = i + 1;
var blob = builder.CreateBlobAssetReference<BlobArray<int>>(Allocator.Temp);
Assert.That(blob.Value.ToArray(), Is.EquivalentTo(new[]{1,2,3}));

BlobString

var builder = new StringBuilder<UTF8Encoding>("123");
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.ToString(), Is.EquivalentTo("123"));
var builder = new BlobBuilder(Allocator.Temp);
ref var blobString = ref builder.ConstructRoot<BlobString>();
builder.AllocateString(ref blobString, "123");
var blob = builder.CreateBlobAssetReference<BlobString>(Allocator.Temp);
Assert.That(blob.Value.ToString(), Is.EquivalentTo("123"));

BlobPtr<int>

var builder = new PtrBuilderWithNewValue<int>(1);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.Value, Is.EqualTo(1));
var builder = new BlobBuilder(Allocator.Temp);
ref var intPtr = ref builder.ConstructRoot<BlobPtr<int>>();
builder.Allocate(ref intPtr) = 1;
var blob = builder.CreateBlobAssetReference<BlobPtr<int>>(Allocator.Temp);
Assert.That(blob.Value.Value, Is.EqualTo(1));
struct IntPtr
{
  int Int;
  BlobPtr<int> Ptr;
}
var builder = new StructBuilder<IntPtr>();
var valueBuilder = builder.SetValue(ref builder.Value.Int, 1);
builder.SetPointer(ref builder.Value.Ptr2, valueBuilder);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.Ptr1.Value, Is.EqualTo(1));
Assert.That(blob.Value.Ptr2.Value, Is.EqualTo(1));
var builder = new BlobBuilder(Allocator.Temp);
ref var intPtr = ref builder.ConstructRoot<IntPtr>();
intPtr.Int = 1;
builder.SetPointer(ref intPtr.Ptr, ref intPtr.Int);
var blob = builder.CreateBlobAssetReference<IntPtr>(Allocator.Temp);
Assert.That(blob.Value.Int, Is.EqualTo(1));
Assert.That(blob.Value.Ptr.Value, Is.EqualTo(1));
struct PtrPtr
{
  BlobPtr<int> Ptr1;
  BlobPtr<int> Ptr2;
}
var builder = new StructBuilder<PtrPtr>();
var ptrBuilder = builder.SetPointer(ref builder.Value.Ptr1, 1);
builder.SetPointer(ref builder.Value.Ptr2, ptrBuilder.ValueBuilder);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.Ptr1.Value, Is.EqualTo(1));
Assert.That(blob.Value.Ptr2.Value, Is.EqualTo(1));
var builder = new BlobBuilder(Allocator.Temp);
ref var ptrPtr = ref builder.ConstructRoot<PtrPtr>();
ref var ptrValue = ref builder.Allocate(ref ptrPtr.Ptr1);
ptrValue = 1;
builder.SetPointer(ref ptrPtr.Ptr2, ref ptrValue);
var blob = builder.CreateBlobAssetReference<PtrPtr>(Allocator.Temp);
Assert.That(blob.Value.Ptr1.Value, Is.EqualTo(1));
Assert.That(blob.Value.Ptr2.Value, Is.EqualTo(1));
using BlobString = 
BlobString<UTF8Encoding>;
    
struct Blob
{
  int Int;
  BlobString String;
  BlobPtr<BlobString> PtrString;
  BlobArray<int> IntArray;
}
var builder = new StructBuilder<Blob>();
builder.SetValue(ref builder.Value.Int, 1);
var stringBuilder = builder.SetString(ref builder.Value.String, "123");
builder.SetPointer(ref builder.Value.PtrString, stringBuilder);
builder.SetArray(ref builder.Value.IntArray, new[] { 1, 2, 3 });
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.Int, Is.EqualTo(1));
Assert.That(blob.Value.String.ToString(), Is.EqualTo("123"));
Assert.That(blob.Value.PtrString.Value.ToString(), Is.EqualTo("123"));
Assert.That(blob.Value.IntArray.ToArray(), Is.EqualTo(new[]{1,2,3}));
var builder = new BlobBuilder(Allocator.Temp);
ref var root = ref builder.ConstructRoot<Blob>();
root.Int = 1;
builder.AllocateString(ref root.String, "123");
builder.SetPointer(ref root.PtrString, ref root.String);
var intArrayBuilder = builder.Allocate(ref root.IntArray, 3);
for (var i = 0; i < 3; i++) intArrayBuilder[i] = i + 1;
var blob = builder.CreateBlobAssetReference<Blob>(Allocator.Temp);
Assert.That(blob.Value.Int, Is.EqualTo(1));
Assert.That(blob.Value.String.ToString(), Is.EqualTo("123"));
Assert.That(blob.Value.PtrString.Value.ToString(), Is.EqualTo("123"));
Assert.That(blob.Value.IntArray.ToArray(), Is.EqualTo(new [] {1, 2, 3}));

BlobSortedArray<int, int>

var builder = new SortedArrayBuilder<int, int>(
    new []{ (1, 123), (2, 234), (3, 345) });
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value[1], Is.EqualTo(123));
Assert.That(blob.Value[2], Is.EqualTo(234));
Assert.That(blob.Value[3], Is.EqualTo(345));

BlobTree<int>

var node = new TreeNode<int>(100, new []
{
    new TreeNode<int>(200),
    new TreeNode<int>(300)
});
var builder = new TreeBuilder<int>(node);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.FindChildrenIndices(0), Is.EqualTo(new[]{1,2}));
Assert.That(blob.Value[0], Is.EqualTo(100));
Assert.That(blob.Value[1], Is.EqualTo(200));
Assert.That(blob.Value[2], Is.EqualTo(300));

BlobPtrAny

var builder = new AnyPtrBuilder();
builder.SetValue(100);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.GetValue<int>(), Is.EqualTo(100));
Assert.That(blob.Value.Size, Is.EqualTo(sizeof(int)));
    
builder.SetValue(long.MaxValue);
blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.GetValue<long>(), Is.EqualTo(long.MaxValue));
Assert.That(blob.Value.Size, Is.EqualTo(sizeof(long)));

BlobArrayAny

var builder = new AnyArrayBuilder();
builder.Add(123L);
builder.Add(456);
builder.Add(1111.0f);
builder.Add(2333.3);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.GetValue<long>(0), Is.EqualTo(123L));
Assert.That(blob.Value.GetValue<int>(1), Is.EqualTo(456));
Assert.That(blob.Value.GetValue<float>(2), Is.EqualTo(1111.0f));
Assert.That(blob.Value.GetValue<double>(3), Is.EqualTo(2333.3));

BlobTreeAny

var intNode = new TreeNode(new ValueBuilder<int>(100));
var longNode = new TreeNode(new ValueBuilder<long>(200));
var doubleNode = new TreeNode(new ValueBuilder<double>(300));
longNode.Parent = intNode;
doubleNode.Parent = intNode;
var builder = new AnyTreeBuilder(intNode);
var blob = builder.CreateManagedBlobAssetReference();
Assert.That(blob.Value.FindChildrenIndices(0), Is.EqualTo(new[]{1,2}));
Assert.That(blob.Value[0].GetValue<int>(), Is.EqualTo(100));
Assert.That(blob.Value[1].GetValue<long>(), Is.EqualTo(200));
Assert.That(blob.Value[2].GetValue<double>(), Is.EqualTo(300));

About

Standalone library to build BLOB for both Unity.Entities and .NET

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages