-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
316 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
DEFINE TABLE vector SCHEMAFULL; | ||
|
||
DEFINE FIELD name ON vector TYPE string; | ||
DEFINE FIELD value ON vector TYPE array; | ||
DEFINE FIELD value.* ON vector TYPE number; | ||
|
||
CREATE vector:none SET name = "none", value = NONE; | ||
CREATE vector:empty SET name = "empty", value = []; | ||
CREATE vector:vector2 SET name = "vector2", value = [2.5, 0.5]; | ||
CREATE vector:vector3 SET name = "vector3", value = [4, 9, 16]; | ||
CREATE vector:vector4 SET name = "vector4", value = [2, 3, 4, 5]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using System.Globalization; | ||
using System.Numerics; | ||
using System.Text.Json; | ||
|
||
namespace SurrealDb.Internals.Helpers; | ||
|
||
internal static class VectorConverterHelper | ||
{ | ||
public static bool TryReadVectorFromJsonArray(ref Utf8JsonReader reader, byte length, out float[] values) | ||
{ | ||
values = new float[length]; | ||
|
||
for (byte index = 0; index < length; index++) | ||
{ | ||
if (!reader.Read()) | ||
return false; | ||
|
||
values[index] = reader.TokenType switch | ||
{ | ||
JsonTokenType.Number => reader.GetSingle(), | ||
JsonTokenType.String => TryParseFloat(reader.GetString()!, out var value) | ||
? value | ||
: throw new JsonException($"Cannot deserialize {nameof(Vector)}{length}"), | ||
_ => throw new JsonException($"Cannot deserialize {nameof(Vector)}{length}") | ||
}; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
public static bool TryParseFloat(string input, out float result) | ||
{ | ||
return float.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out result); | ||
} | ||
} |
38 changes: 38 additions & 0 deletions
38
SurrealDb/Internals/Json/Converters/Vector2ValueConverter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
using SurrealDb.Internals.Helpers; | ||
using System.Numerics; | ||
using System.Text.Json; | ||
using System.Text.Json.Serialization; | ||
|
||
namespace SurrealDb.Internals.Json.Converters; | ||
|
||
internal class Vector2ValueConverter : JsonConverter<Vector2> | ||
{ | ||
public override Vector2 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) | ||
{ | ||
if (reader.TokenType == JsonTokenType.None || reader.TokenType == JsonTokenType.Null) | ||
return default; | ||
|
||
const byte VECTOR_LENGTH = 2; | ||
|
||
if (reader.TokenType == JsonTokenType.StartArray && | ||
VectorConverterHelper.TryReadVectorFromJsonArray(ref reader, VECTOR_LENGTH, out var values) | ||
) | ||
#if NET6_0_OR_GREATER | ||
return new Vector2(values); | ||
#else | ||
return new Vector2(values[0], values[1]); | ||
#endif | ||
|
||
throw new JsonException($"Cannot deserialize {nameof(Vector2)}"); | ||
} | ||
|
||
public override void Write(Utf8JsonWriter writer, Vector2 value, JsonSerializerOptions options) | ||
{ | ||
writer.WriteStartArray(); | ||
|
||
writer.WriteNumberValue(value.X); | ||
writer.WriteNumberValue(value.Y); | ||
|
||
writer.WriteEndArray(); | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
SurrealDb/Internals/Json/Converters/Vector3ValueConverter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
using SurrealDb.Internals.Helpers; | ||
using System.Numerics; | ||
using System.Text.Json; | ||
using System.Text.Json.Serialization; | ||
|
||
namespace SurrealDb.Internals.Json.Converters; | ||
|
||
internal class Vector3ValueConverter : JsonConverter<Vector3> | ||
{ | ||
public override Vector3 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) | ||
{ | ||
if (reader.TokenType == JsonTokenType.None || reader.TokenType == JsonTokenType.Null) | ||
return default; | ||
|
||
const byte VECTOR_LENGTH = 3; | ||
|
||
if (reader.TokenType == JsonTokenType.StartArray && | ||
VectorConverterHelper.TryReadVectorFromJsonArray(ref reader, VECTOR_LENGTH, out var values) | ||
) | ||
#if NET6_0_OR_GREATER | ||
return new Vector3(values); | ||
#else | ||
return new Vector3(values[0], values[1], values[2]); | ||
#endif | ||
|
||
throw new JsonException($"Cannot deserialize {nameof(Vector3)}"); | ||
} | ||
|
||
public override void Write(Utf8JsonWriter writer, Vector3 value, JsonSerializerOptions options) | ||
{ | ||
writer.WriteStartArray(); | ||
|
||
writer.WriteNumberValue(value.X); | ||
writer.WriteNumberValue(value.Y); | ||
writer.WriteNumberValue(value.Z); | ||
|
||
writer.WriteEndArray(); | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
SurrealDb/Internals/Json/Converters/Vector4ValueConverter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
using SurrealDb.Internals.Helpers; | ||
using System.Numerics; | ||
using System.Text.Json; | ||
using System.Text.Json.Serialization; | ||
|
||
namespace SurrealDb.Internals.Json.Converters; | ||
|
||
internal class Vector4ValueConverter : JsonConverter<Vector4> | ||
{ | ||
public override Vector4 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) | ||
{ | ||
if (reader.TokenType == JsonTokenType.None || reader.TokenType == JsonTokenType.Null) | ||
return default; | ||
|
||
const byte VECTOR_LENGTH = 4; | ||
|
||
if (reader.TokenType == JsonTokenType.StartArray && | ||
VectorConverterHelper.TryReadVectorFromJsonArray(ref reader, VECTOR_LENGTH, out var values) | ||
) | ||
#if NET6_0_OR_GREATER | ||
return new Vector4(values); | ||
#else | ||
return new Vector4(values[0], values[1], values[2], values[3]); | ||
#endif | ||
|
||
throw new JsonException($"Cannot deserialize {nameof(Vector4)}"); | ||
} | ||
|
||
public override void Write(Utf8JsonWriter writer, Vector4 value, JsonSerializerOptions options) | ||
{ | ||
writer.WriteStartArray(); | ||
|
||
writer.WriteNumberValue(value.X); | ||
writer.WriteNumberValue(value.Y); | ||
writer.WriteNumberValue(value.Z); | ||
writer.WriteNumberValue(value.W); | ||
|
||
writer.WriteEndArray(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters