mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-22 21:18:53 +00:00
[C#] support Object API (#5710)
* [C#] support Object API * fix sign-compare * fix indent * add new line before for loop. * using auto whenever possible * reduce the amout of blank lines. * wip: support vectors of union * done: support unions of vectors * set C# version to 4.0 * remove null propagation operator * remove auto property initializer * remove expression-bodied method * remove pattern matching * add Example2 to NetTest.sh * separate JavaUsage.md and CsharpUsage.md from JavaCsharpUsage.md * add C# Object based API notes. * support vs2010. * remove range based for loop. * remove System.Linq * fix indent * CreateSharedString to CreateString * check shared attribute * snake case
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
// </auto-generated>
|
||||
|
||||
using global::System;
|
||||
using global::System.Collections.Generic;
|
||||
using global::FlatBuffers;
|
||||
|
||||
public struct Attacker : IFlatbufferObject
|
||||
@@ -31,5 +32,28 @@ public struct Attacker : IFlatbufferObject
|
||||
int o = builder.EndTable();
|
||||
return new Offset<Attacker>(o);
|
||||
}
|
||||
public AttackerT UnPack() {
|
||||
var _o = new AttackerT();
|
||||
this.UnPackTo(_o);
|
||||
return _o;
|
||||
}
|
||||
public void UnPackTo(AttackerT _o) {
|
||||
_o.SwordAttackDamage = this.SwordAttackDamage;
|
||||
}
|
||||
public static Offset<Attacker> Pack(FlatBufferBuilder builder, AttackerT _o) {
|
||||
if (_o == null) return default(Offset<Attacker>);
|
||||
return CreateAttacker(
|
||||
builder,
|
||||
_o.SwordAttackDamage);
|
||||
}
|
||||
};
|
||||
|
||||
public class AttackerT
|
||||
{
|
||||
public int SwordAttackDamage { get; set; }
|
||||
|
||||
public AttackerT() {
|
||||
this.SwordAttackDamage = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// </auto-generated>
|
||||
|
||||
using global::System;
|
||||
using global::System.Collections.Generic;
|
||||
using global::FlatBuffers;
|
||||
|
||||
public struct BookReader : IFlatbufferObject
|
||||
@@ -20,5 +21,28 @@ public struct BookReader : IFlatbufferObject
|
||||
builder.PutInt(BooksRead);
|
||||
return new Offset<BookReader>(builder.Offset);
|
||||
}
|
||||
public BookReaderT UnPack() {
|
||||
var _o = new BookReaderT();
|
||||
this.UnPackTo(_o);
|
||||
return _o;
|
||||
}
|
||||
public void UnPackTo(BookReaderT _o) {
|
||||
_o.BooksRead = this.BooksRead;
|
||||
}
|
||||
public static Offset<BookReader> Pack(FlatBufferBuilder builder, BookReaderT _o) {
|
||||
if (_o == null) return default(Offset<BookReader>);
|
||||
return CreateBookReader(
|
||||
builder,
|
||||
_o.BooksRead);
|
||||
}
|
||||
};
|
||||
|
||||
public class BookReaderT
|
||||
{
|
||||
public int BooksRead { get; set; }
|
||||
|
||||
public BookReaderT() {
|
||||
this.BooksRead = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,3 +13,33 @@ public enum Character : byte
|
||||
Unused = 6,
|
||||
};
|
||||
|
||||
public class CharacterUnion {
|
||||
public Character Type { get; set; }
|
||||
public object Value { get; set; }
|
||||
|
||||
public CharacterUnion() {
|
||||
this.Type = Character.NONE;
|
||||
this.Value = null;
|
||||
}
|
||||
|
||||
public T As<T>() where T : class { return this.Value as T; }
|
||||
public AttackerT AsMuLan() { return this.As<AttackerT>(); }
|
||||
public RapunzelT AsRapunzel() { return this.As<RapunzelT>(); }
|
||||
public BookReaderT AsBelle() { return this.As<BookReaderT>(); }
|
||||
public BookReaderT AsBookFan() { return this.As<BookReaderT>(); }
|
||||
public string AsOther() { return this.As<string>(); }
|
||||
public string AsUnused() { return this.As<string>(); }
|
||||
|
||||
public static int Pack(FlatBuffers.FlatBufferBuilder builder, CharacterUnion _o) {
|
||||
switch (_o.Type) {
|
||||
default: return 0;
|
||||
case Character.MuLan: return Attacker.Pack(builder, _o.AsMuLan()).Value;
|
||||
case Character.Rapunzel: return Rapunzel.Pack(builder, _o.AsRapunzel()).Value;
|
||||
case Character.Belle: return BookReader.Pack(builder, _o.AsBelle()).Value;
|
||||
case Character.BookFan: return BookReader.Pack(builder, _o.AsBookFan()).Value;
|
||||
case Character.Other: return builder.CreateString(_o.AsOther()).Value;
|
||||
case Character.Unused: return builder.CreateString(_o.AsUnused()).Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// </auto-generated>
|
||||
|
||||
using global::System;
|
||||
using global::System.Collections.Generic;
|
||||
using global::FlatBuffers;
|
||||
|
||||
public struct Movie : IFlatbufferObject
|
||||
@@ -18,6 +19,7 @@ public struct Movie : IFlatbufferObject
|
||||
|
||||
public Character MainCharacterType { get { int o = __p.__offset(4); return o != 0 ? (Character)__p.bb.Get(o + __p.bb_pos) : Character.NONE; } }
|
||||
public TTable? MainCharacter<TTable>() where TTable : struct, IFlatbufferObject { int o = __p.__offset(6); return o != 0 ? (TTable?)__p.__union<TTable>(o + __p.bb_pos) : null; }
|
||||
public string MainCharacterAsString() { int o = __p.__offset(6); return o != 0 ? __p.__string(o + __p.bb_pos) : null; }
|
||||
public Character CharactersType(int j) { int o = __p.__offset(8); return o != 0 ? (Character)__p.bb.Get(__p.__vector(o) + j * 1) : (Character)0; }
|
||||
public int CharactersTypeLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
|
||||
#if ENABLE_SPAN_T
|
||||
@@ -27,6 +29,7 @@ public struct Movie : IFlatbufferObject
|
||||
#endif
|
||||
public Character[] GetCharactersTypeArray() { int o = __p.__offset(8); if (o == 0) return null; int p = __p.__vector(o); int l = __p.__vector_len(o); Character[] a = new Character[l]; for (int i = 0; i < l; i++) { a[i] = (Character)__p.bb.Get(p + i * 1); } return a; }
|
||||
public TTable? Characters<TTable>(int j) where TTable : struct, IFlatbufferObject { int o = __p.__offset(10); return o != 0 ? (TTable?)__p.__union<TTable>(__p.__vector(o) + j * 4) : null; }
|
||||
public string CharactersAsString(int j) { int o = __p.__offset(10); return o != 0 ? __p.__string(__p.__vector(o) + j * 4) : null; }
|
||||
public int CharactersLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
|
||||
|
||||
public static Offset<Movie> CreateMovie(FlatBufferBuilder builder,
|
||||
@@ -59,5 +62,96 @@ public struct Movie : IFlatbufferObject
|
||||
}
|
||||
public static void FinishMovieBuffer(FlatBufferBuilder builder, Offset<Movie> offset) { builder.Finish(offset.Value, "MOVI"); }
|
||||
public static void FinishSizePrefixedMovieBuffer(FlatBufferBuilder builder, Offset<Movie> offset) { builder.FinishSizePrefixed(offset.Value, "MOVI"); }
|
||||
public MovieT UnPack() {
|
||||
var _o = new MovieT();
|
||||
this.UnPackTo(_o);
|
||||
return _o;
|
||||
}
|
||||
public void UnPackTo(MovieT _o) {
|
||||
_o.MainCharacter = new CharacterUnion();
|
||||
_o.MainCharacter.Type = this.MainCharacterType;
|
||||
switch (this.MainCharacterType) {
|
||||
default: break;
|
||||
case Character.MuLan:
|
||||
_o.MainCharacter.Value = this.MainCharacter<Attacker>().HasValue ? this.MainCharacter<Attacker>().Value.UnPack() : null;
|
||||
break;
|
||||
case Character.Rapunzel:
|
||||
_o.MainCharacter.Value = this.MainCharacter<Rapunzel>().HasValue ? this.MainCharacter<Rapunzel>().Value.UnPack() : null;
|
||||
break;
|
||||
case Character.Belle:
|
||||
_o.MainCharacter.Value = this.MainCharacter<BookReader>().HasValue ? this.MainCharacter<BookReader>().Value.UnPack() : null;
|
||||
break;
|
||||
case Character.BookFan:
|
||||
_o.MainCharacter.Value = this.MainCharacter<BookReader>().HasValue ? this.MainCharacter<BookReader>().Value.UnPack() : null;
|
||||
break;
|
||||
case Character.Other:
|
||||
_o.MainCharacter.Value = this.MainCharacterAsString();
|
||||
break;
|
||||
case Character.Unused:
|
||||
_o.MainCharacter.Value = this.MainCharacterAsString();
|
||||
break;
|
||||
}
|
||||
_o.Characters = new List<CharacterUnion>();
|
||||
for (var _j = 0; _j < this.CharactersLength; ++_j) {
|
||||
var _o_Characters = new CharacterUnion();
|
||||
_o_Characters.Type = this.CharactersType(_j);
|
||||
switch (this.CharactersType(_j)) {
|
||||
default: break;
|
||||
case Character.MuLan:
|
||||
_o_Characters.Value = this.Characters<Attacker>(_j).HasValue ? this.Characters<Attacker>(_j).Value.UnPack() : null;
|
||||
break;
|
||||
case Character.Rapunzel:
|
||||
_o_Characters.Value = this.Characters<Rapunzel>(_j).HasValue ? this.Characters<Rapunzel>(_j).Value.UnPack() : null;
|
||||
break;
|
||||
case Character.Belle:
|
||||
_o_Characters.Value = this.Characters<BookReader>(_j).HasValue ? this.Characters<BookReader>(_j).Value.UnPack() : null;
|
||||
break;
|
||||
case Character.BookFan:
|
||||
_o_Characters.Value = this.Characters<BookReader>(_j).HasValue ? this.Characters<BookReader>(_j).Value.UnPack() : null;
|
||||
break;
|
||||
case Character.Other:
|
||||
_o_Characters.Value = this.CharactersAsString(_j);
|
||||
break;
|
||||
case Character.Unused:
|
||||
_o_Characters.Value = this.CharactersAsString(_j);
|
||||
break;
|
||||
}
|
||||
_o.Characters.Add(_o_Characters);
|
||||
}
|
||||
}
|
||||
public static Offset<Movie> Pack(FlatBufferBuilder builder, MovieT _o) {
|
||||
if (_o == null) return default(Offset<Movie>);
|
||||
var _main_character_type = _o.MainCharacter == null ? Character.NONE : _o.MainCharacter.Type;
|
||||
var _main_character = _o.MainCharacter == null ? 0 : CharacterUnion.Pack(builder, _o.MainCharacter);
|
||||
var _characters_type = default(VectorOffset);
|
||||
if (_o.Characters != null) {
|
||||
var __characters_type = new Character[_o.Characters.Count];
|
||||
for (var _j = 0; _j < __characters_type.Length; ++_j) { __characters_type[_j] = _o.Characters[_j].Type; }
|
||||
_characters_type = CreateCharactersTypeVector(builder, __characters_type);
|
||||
}
|
||||
var _characters = default(VectorOffset);
|
||||
if (_o.Characters != null) {
|
||||
var __characters = new int[_o.Characters.Count];
|
||||
for (var _j = 0; _j < __characters.Length; ++_j) { __characters[_j] = CharacterUnion.Pack(builder, _o.Characters[_j]); }
|
||||
_characters = CreateCharactersVector(builder, __characters);
|
||||
}
|
||||
return CreateMovie(
|
||||
builder,
|
||||
_main_character_type,
|
||||
_main_character,
|
||||
_characters_type,
|
||||
_characters);
|
||||
}
|
||||
};
|
||||
|
||||
public class MovieT
|
||||
{
|
||||
public CharacterUnion MainCharacter { get; set; }
|
||||
public List<CharacterUnion> Characters { get; set; }
|
||||
|
||||
public MovieT() {
|
||||
this.MainCharacter = null;
|
||||
this.Characters = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// </auto-generated>
|
||||
|
||||
using global::System;
|
||||
using global::System.Collections.Generic;
|
||||
using global::FlatBuffers;
|
||||
|
||||
public struct Rapunzel : IFlatbufferObject
|
||||
@@ -20,5 +21,28 @@ public struct Rapunzel : IFlatbufferObject
|
||||
builder.PutInt(HairLength);
|
||||
return new Offset<Rapunzel>(builder.Offset);
|
||||
}
|
||||
public RapunzelT UnPack() {
|
||||
var _o = new RapunzelT();
|
||||
this.UnPackTo(_o);
|
||||
return _o;
|
||||
}
|
||||
public void UnPackTo(RapunzelT _o) {
|
||||
_o.HairLength = this.HairLength;
|
||||
}
|
||||
public static Offset<Rapunzel> Pack(FlatBufferBuilder builder, RapunzelT _o) {
|
||||
if (_o == null) return default(Offset<Rapunzel>);
|
||||
return CreateRapunzel(
|
||||
builder,
|
||||
_o.HairLength);
|
||||
}
|
||||
};
|
||||
|
||||
public class RapunzelT
|
||||
{
|
||||
public int HairLength { get; set; }
|
||||
|
||||
public RapunzelT() {
|
||||
this.HairLength = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user