Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
650 changes: 650 additions & 0 deletions src/cpp/vim/object-model.h

Large diffs are not rendered by default.

41 changes: 41 additions & 0 deletions src/cpp/vim/vim.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,47 @@ namespace Vim
static const std::string data_column_ulong_prefix = "ulong:";
static const std::string data_column_float_prefix = "float:";
static const std::string data_column_double_prefix = "double:";
static const std::string data_column_vector3_prefix = "vector3:";
static const std::string data_column_vector4_prefix = "vector4:";
static const std::string data_column_matrix4x4_prefix = "matrix4x4:";

class Vector3
{
public:
float X = 0.0f;
float Y = 0.0f;
float Z = 0.0f;
};

class Vector4
{
public:
float X = 0.0f;
float Y = 0.0f;
float Z = 0.0f;
float W = 0.0f;
};

class Matrix4x4
{
public:
float M11; // row 1, column 1
float M12; // row 1, column 2
float M13; // ...
float M14;
float M21;
float M22;
float M23;
float M24;
float M31;
float M32;
float M33;
float M34;
float M41;
float M42;
float M43;
float M44;
};

class EntityTable
{
Expand Down
3 changes: 3 additions & 0 deletions src/cs/vim/Vim.Format.CodeGen/ObjectModelCppGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ private static string ToCppType(string type) =>
"String" or "string" => "std::string",
"Int32" or "int" => "int",
"Int64" or "Long" or "long" => "long long",
"Vector3" or "vector3" => "Vector3",
"Vector4" or "vector4" => "Vector4",
"Matrix4x4" or "matrix4x4" => "Matrix4x4",
_ => throw new ArgumentOutOfRangeException(nameof(type), type, $"Type {type} not supported")
};

Expand Down
7 changes: 5 additions & 2 deletions src/cs/vim/Vim.Format.CodeGen/ObjectModelGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,8 @@ IEnumerable<FieldInfo> GetEquatableFields(FieldInfo[] fis)

private static CodeBuilder WriteDocument(CodeBuilder cb)
{
var entityTypes = ObjectModelReflection.GetEntityTypes().ToArray();
var entityTypes = ObjectModelReflection.GetEntityTypes()
.ToArray();

foreach (var et in entityTypes)
WriteEntityClass(et, cb);
Expand Down Expand Up @@ -433,7 +434,9 @@ private static void WriteEntityTable(CodeBuilder cb, Type t)

private static void WriteDocumentBuilder(CodeBuilder cb)
{
var entityTypes = ObjectModelReflection.GetEntityTypes().ToArray();
var entityTypes = ObjectModelReflection.GetEntityTypes()
.Where(t => !t.IsEntityTableBuffer())
.ToArray();

cb.AppendLine("public static class DocumentBuilderExtensions");
cb.AppendLine("{");
Expand Down
10 changes: 9 additions & 1 deletion src/cs/vim/Vim.Format.CodeGen/ObjectModelTypeScriptGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ private static string ToTypeScriptType(string type)
"Single" or "float" or "Double" or "double" or "Int32" or "int" => "number",
"Int64" or "Long" or "long" => "bigint",
"String" or "string" => "string",
_ => throw new ArgumentOutOfRangeException(nameof(type), type, $"Type {type} not supported")
"Vector3" => "Vector3",
"Vector4" => "Vector4",
"Matrix4x4" => "Matrix4x4"
};

private static string ToTypeScriptArrayType(string type)
Expand Down Expand Up @@ -235,6 +237,9 @@ private static string GetFieldGetter(this FieldInfo fieldInfo)
"number" => "getNumber",
"bigint" => "getBigInt",
"string" => "getString",
"Vector3" => "getVector3",
"Vector4" => "getVector4",
"Matrix4x4" => "getMatrix4x4",
_ => throw new ArgumentOutOfRangeException($"There's no getter function for {fieldInfo.FieldType.Name}")
};

Expand All @@ -245,6 +250,9 @@ private static string GetArrayGetterName(this FieldInfo fieldInfo) =>
"number" => "getNumberArray",
"bigint" => "getBigIntArray",
"string" => "getStringArray",
"Vector3" => "getVector3Array",
"Vector4" => "getVector4Array",
"Matrix4x4" => "getMatrix4x4Array",
_ => throw new ArgumentOutOfRangeException($"There's no getter function for {fieldInfo.FieldType.Name}")
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
using System;

namespace Vim.Format
{
public class EntityBufferAttribute : Attribute
{ }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
using System;

namespace Vim.Format
{
public class VimSqlIgnoreAttribute : Attribute
{ }
}
25 changes: 25 additions & 0 deletions src/cs/vim/Vim.Format.Core/ColumnExtensions.Buffer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using Vim.BFast;
using Vim.LinqArray;
using Vim.Math3d;

namespace Vim.Format
{
Expand Down Expand Up @@ -70,6 +71,12 @@ public static object GetDataColumnValue(this IBuffer dataColumn, string typePref
return dataColumn.AsArray<float>().ElementAtOrDefault(rowIndex);
case VimConstants.DoubleColumnNameTypePrefix:
return dataColumn.AsArray<double>().ElementAtOrDefault(rowIndex);
case VimConstants.Vector3ColumnNameTypePrefix:
return dataColumn.AsArray<Vector3>().ElementAtOrDefault(rowIndex);
case VimConstants.Vector4ColumnNameTypePrefix:
return dataColumn.AsArray<Vector4>().ElementAtOrDefault(rowIndex);
case VimConstants.Matrix4x4ColumnNameTypePrefix:
return dataColumn.AsArray<Matrix4x4>().ElementAtOrDefault(rowIndex);
default:
return null;
}
Expand All @@ -92,6 +99,12 @@ public static IBuffer CreateDefaultDataColumnBuffer(int length, string typePrefi
return new float[length].ToBuffer();
case (VimConstants.DoubleColumnNameTypePrefix):
return new double[length].ToBuffer();
case (VimConstants.Vector3ColumnNameTypePrefix):
return new Vector3[length].ToBuffer();
case (VimConstants.Vector4ColumnNameTypePrefix):
return new Vector4[length].ToBuffer();
case (VimConstants.Matrix4x4ColumnNameTypePrefix):
return new Matrix4x4[length].ToBuffer();
default:
throw new Exception($"{nameof(CreateDefaultDataColumnBuffer)} - {UnknownNamedBufferPrefix}");
}
Expand All @@ -111,6 +124,12 @@ public static IBuffer CopyDataColumn(this IBuffer dataColumn, string typePrefix,
return (dataColumn.Data as float[]).RemapData(remapping).ToBuffer();
case (VimConstants.ByteColumnNameTypePrefix):
return (dataColumn.Data as byte[]).RemapData(remapping).ToBuffer();
case (VimConstants.Vector3ColumnNameTypePrefix):
return (dataColumn.Data as Vector3[]).RemapData(remapping).ToBuffer();
case (VimConstants.Vector4ColumnNameTypePrefix):
return (dataColumn.Data as Vector4[]).RemapData(remapping).ToBuffer();
case (VimConstants.Matrix4x4ColumnNameTypePrefix):
return (dataColumn.Data as Matrix4x4[]).RemapData(remapping).ToBuffer();
default:
throw new Exception($"{nameof(CopyDataColumn)} - {UnknownNamedBufferPrefix}");
}
Expand Down Expand Up @@ -139,6 +158,12 @@ public static IBuffer ConcatDataColumnBuffers(this IBuffer thisBuffer, IBuffer o
return thisBuffer.Concat<float>(otherBuffer);
case (VimConstants.DoubleColumnNameTypePrefix):
return thisBuffer.Concat<double>(otherBuffer);
case (VimConstants.Vector3ColumnNameTypePrefix):
return thisBuffer.Concat<Vector3>(otherBuffer);
case (VimConstants.Vector4ColumnNameTypePrefix):
return thisBuffer.Concat<Vector4>(otherBuffer);
case (VimConstants.Matrix4x4ColumnNameTypePrefix):
return thisBuffer.Concat<Matrix4x4>(otherBuffer);
default:
throw new Exception($"{nameof(ConcatDataColumnBuffers)} - {UnknownNamedBufferPrefix}");
}
Expand Down
6 changes: 6 additions & 0 deletions src/cs/vim/Vim.Format.Core/ColumnExtensions.Reflection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ public static IEnumerable<FieldInfo> GetRelationFields(this Type t)
public static string GetEntityTableName(this Type t)
=> (t.GetCustomAttribute(typeof(TableNameAttribute)) as TableNameAttribute)?.Name;

public static bool IsEntityTableBuffer(this Type t)
=> (t.GetCustomAttribute(typeof(EntityBufferAttribute)) as EntityBufferAttribute) != null;

public static bool IsEntityTableVimSqlIgnore(this Type t)
=> (t.GetCustomAttribute(typeof(VimSqlIgnoreAttribute)) as VimSqlIgnoreAttribute) != null;

public static (string IndexColumnName, string LocalFieldName) GetIndexColumnInfo(this FieldInfo fieldInfo)
{
if (!fieldInfo.Name.StartsWith("_"))
Expand Down
4 changes: 4 additions & 0 deletions src/cs/vim/Vim.Format.Core/ColumnExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Vim.Math3d;

namespace Vim.Format
{
Expand All @@ -17,6 +18,9 @@ public static readonly IReadOnlyCollection<ColumnInfo> AllColumnInfos
new ColumnInfo(ColumnType.DataColumn, VimConstants.ByteColumnNameTypePrefix, typeof(byte), typeof(bool)),
new ColumnInfo(ColumnType.DataColumn, VimConstants.DoubleColumnNameTypePrefix, typeof(double)),
new ColumnInfo(ColumnType.DataColumn, VimConstants.FloatColumnNameTypePrefix, typeof(float)),
new ColumnInfo(ColumnType.DataColumn, VimConstants.Vector3ColumnNameTypePrefix, typeof(Vector3)),
new ColumnInfo(ColumnType.DataColumn, VimConstants.Vector4ColumnNameTypePrefix, typeof(Vector4)),
new ColumnInfo(ColumnType.DataColumn, VimConstants.Matrix4x4ColumnNameTypePrefix, typeof(Matrix4x4))
};

public static readonly IReadOnlyDictionary<string, ColumnType> TypePrefixToColumnTypeMap
Expand Down
12 changes: 7 additions & 5 deletions src/cs/vim/Vim.Format.Core/EntityTable.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Diagnostics;
using System.Linq;
using Vim.BFast;
using Vim.LinqArray;
Expand Down Expand Up @@ -39,7 +38,7 @@ public IArray<string> GetStringColumnValues(string columnName)
?.Select(Document.GetString)
.ToIArray();

public IArray<T> GetDataColumnValues<T>(string columnName) where T : unmanaged
public T[] GetDataColumnAsTypedArray<T>(string columnName) where T : unmanaged
{
var type = typeof(T);

Expand All @@ -51,12 +50,15 @@ public IArray<T> GetDataColumnValues<T>(string columnName) where T : unmanaged
return null;

if (type == typeof(short))
return namedBuffer.GetColumnValues<int>().Select(i => (short)i).ToIArray() as IArray<T>;
return namedBuffer.GetColumnValues<int>().Select(i => (short)i).Cast<T>().ToArray();

if (type == typeof(bool))
return namedBuffer.GetColumnValues<byte>().Select(b => b != 0).ToIArray() as IArray<T>;
return namedBuffer.GetColumnValues<byte>().Select(b => b != 0).Cast<T>().ToArray();

return namedBuffer.GetColumnValues<T>().ToIArray();
return namedBuffer.GetColumnValues<T>();
}

public IArray<T> GetDataColumnValues<T>(string columnName) where T : unmanaged
=> GetDataColumnAsTypedArray<T>(columnName)?.ToIArray();
}
}
10 changes: 10 additions & 0 deletions src/cs/vim/Vim.Format.Core/EntityTableBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using Vim.BFast;
using Vim.Math3d;

namespace Vim.Format
{
Expand Down Expand Up @@ -93,6 +94,15 @@ public EntityTableBuilder AddDataColumn(string columnName, IEnumerable<byte> val
public EntityTableBuilder AddDataColumn(string columnName, IEnumerable<bool> values)
=> AddDataColumn(columnName, values.Select(x => x ? (byte)1 : (byte)0).ToArray());

public EntityTableBuilder AddDataColumn(string columnName, IEnumerable<Vector3> values)
=> AddDataColumn(columnName, values.ToArray());

public EntityTableBuilder AddDataColumn(string columnName, IEnumerable<Vector4> values)
=> AddDataColumn(columnName, values.ToArray());

public EntityTableBuilder AddDataColumn(string columnName, IEnumerable<Matrix4x4> values)
=> AddDataColumn(columnName, values.ToArray());

public IEnumerable<string> GetAllStrings()
=> StringColumns.Values.SelectMany(sc => sc)
.Where(x => x != null);
Expand Down
2 changes: 0 additions & 2 deletions src/cs/vim/Vim.Format.Core/Geometry/MeshExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,5 @@ public static IArray<T> CornerDataToVertexData<T>(this IMesh mesh, IArray<T> dat
return vertexData.ToIArray();
}
#endregion


}
}
Loading
Loading