public static void InitDynamic(UnsafeBuffer *buffer, int length, int stride) { Assert.Check(buffer != null); Assert.Check(length > 0); Assert.Check(stride > 0); buffer->Ptr = AllocHelper.MallocAndClear(length * stride, AllocHelper.GetAlignmentForArrayElement(stride)); buffer->Length = length; buffer->Stride = stride; buffer->Dynamic = true; }
public static void InitDynamic(UnsafeBuffer *buffer, int length, int stride) { Assert.Check(buffer != null); Assert.Check(length > 0); Assert.Check(stride > 0); buffer->Ptr = Native.MallocAndClear(length * stride, Native.GetAlignment(stride)); buffer->Length = length; buffer->Stride = stride; buffer->Dynamic = 1; }
public static void FillFromString(UnsafeBuffer *buffer, string value) { using (var stream = new UnsafeStream((byte *)buffer)) using (var writer = new StreamWriter(stream, BsonConstants.Encoding)) { foreach (var symbol in value) { writer.Write(symbol); } } }
public static void InitFixed(UnsafeBuffer *buffer, void *ptr, int length, int stride) { Assert.Check(buffer != null); Assert.Check(ptr != null); Assert.Check(length > 0); Assert.Check(stride > 0); // ensure alignment of fixed buffer Assert.Check((((IntPtr)ptr).ToInt64() % AllocHelper.GetAlignmentForArrayElement(stride)) == 0); buffer->Ptr = ptr; buffer->Length = length; buffer->Stride = stride; buffer->Dynamic = false; }
public static void Free(UnsafeBuffer *buffer) { Assert.Check(buffer != null); if (buffer->Dynamic == false) { throw new InvalidOperationException("Can't free a fixed buffer"); } // buffer ptr can't be null Assert.Check(buffer->Ptr != null); // free memory of ptr AllocHelper.Free(buffer->Ptr); // clear buffer itself *buffer = default; }
public static void InitDynamic <T>(UnsafeBuffer *buffer, int length) where T : unmanaged { InitDynamic(buffer, length, sizeof(T)); }
public static void Clear(UnsafeBuffer *buffer) { AllocHelper.MemClear(buffer->Ptr, buffer->Length * buffer->Stride); }
public static void Clear(UnsafeBuffer *buffer) { Native.MemClear(buffer->Ptr, buffer->Length * buffer->Stride); }