private RubyStruct /*!*/ ReadStruct() { RubyStruct obj = (UnmarshalNewObject() as RubyStruct); if (obj == null) { throw RubyExceptions.CreateArgumentError("non-initialized struct"); } var names = obj.GetNames(); int count = ReadInt32(); if (count != names.Count) { throw RubyExceptions.CreateArgumentError("struct size differs"); } for (int i = 0; i < count; i++) { string name = ReadIdentifier(); if (name != names[i]) { RubyClass theClass = Context.GetClassOf(obj); throw RubyExceptions.CreateTypeError("struct {0} not compatible ({1} for {2})", theClass.Name, name, names[i]); } obj[i] = ReadAnObject(false); } return(obj); }
public static MutableString /*!*/ Inspect(RubyStruct /*!*/ self) { RubyContext context = self.Class.Context; using (IDisposable handle = RubyUtils.InfiniteInspectTracker.TrackObject(self)) { // #<struct Struct::Foo name=nil, val=nil> MutableString str = MutableString.Create("#<struct "); str.Append(RubySites.Inspect(context, context.GetClassOf(self))); if (handle == null) { return(str.Append(":...>")); } str.Append(' '); object[] data = self.Values; var members = self.GetNames(); for (int i = 0; i < data.Length; i++) { if (i != 0) { str.Append(", "); } str.Append(members[i]); str.Append("="); str.Append(RubySites.Inspect(context, data[i])); } str.Append('>'); return(str); } }
public static MutableString /*!*/ Inspect(RubyStruct /*!*/ self) { RubyContext context = self.ImmediateClass.Context; using (IDisposable handle = RubyUtils.InfiniteInspectTracker.TrackObject(self)) { // #<struct Struct::Foo name=nil, val=nil> var result = MutableString.CreateMutable(RubyEncoding.Binary); result.Append("#<struct "); result.Append(context.Inspect(context.GetClassOf(self))); if (handle == null) { return(result.Append(":...>")); } result.Append(' '); object[] data = self.Values; var members = self.GetNames(); for (int i = 0; i < data.Length; i++) { if (i != 0) { result.Append(", "); } // TODO (encoding): result.Append(members[i]); result.Append('='); result.Append(context.Inspect(data[i])); } result.Append('>'); return(result); } }
private void WriteStruct(RubyStruct /*!*/ obj) { WriteSubclassData(obj, typeof(RubyStruct)); _writer.Write((byte)'S'); RubyClass theClass = _context.GetClassOf(obj); TestForAnonymous(theClass); WriteModuleName(theClass); var names = obj.GetNames(); WriteInt32(names.Count); foreach (string name in names) { int index = obj.GetIndex(name); // TODO (encoding): WriteSymbol(name, _context.GetIdentifierEncoding()); WriteAnObject(obj[index]); } }
private void WriteStruct(RubyStruct /*!*/ obj) { SubclassData instanceWriter = new SubclassData(this, obj, typeof(RubyStruct)); _writer.Write((byte)'S'); RubyClass theClass = _context.GetClassOf(obj); TestForAnonymous(theClass); WriteSymbol(theClass.Name); var names = obj.GetNames(); WriteInt32(names.Count); foreach (string name in names) { int index = obj.GetIndex(name); WriteSymbol(name); WriteAnObject(obj[index]); } }
public static Node ToYamlNode(RubyStruct/*!*/ self, [NotNull]RubyRepresenter/*!*/ rep) { var fieldNames = self.GetNames(); var map = new Dictionary<MutableString, object>(fieldNames.Count); for (int i = 0; i < fieldNames.Count; i++) { map[MutableString.Create(fieldNames[i])] = self.GetValue(i); } rep.AddYamlProperties(self, map); return rep.Map(self, map); }
private void WriteStruct(RubyStruct/*!*/ obj) { WriteSubclassData(obj, typeof(RubyStruct)); _writer.Write((byte)'S'); RubyClass theClass = _context.GetClassOf(obj); TestForAnonymous(theClass); WriteModuleName(theClass); var names = obj.GetNames(); WriteInt32(names.Count); foreach (string name in names) { int index = obj.GetIndex(name); // TODO (encoding): WriteSymbol(name, _context.GetIdentifierEncoding()); WriteAnObject(obj[index]); } }
public static MutableString/*!*/ Inspect(RubyStruct/*!*/ self) { RubyContext context = self.ImmediateClass.Context; using (IDisposable handle = RubyUtils.InfiniteInspectTracker.TrackObject(self)) { // #<struct Struct::Foo name=nil, val=nil> var result = MutableString.CreateMutable(RubyEncoding.Binary); result.Append("#<struct "); result.Append(context.Inspect(context.GetClassOf(self))); if (handle == null) { return result.Append(":...>"); } result.Append(' '); object[] data = self.Values; var members = self.GetNames(); for (int i = 0; i < data.Length; i++) { if (i != 0) { result.Append(", "); } // TODO (encoding): result.Append(members[i]); result.Append('='); result.Append(context.Inspect(data[i])); } result.Append('>'); return result; } }
private void WriteStruct(RubyStruct/*!*/ obj) { SubclassData instanceWriter = new SubclassData(this, obj, typeof(RubyStruct)); _writer.Write((byte)'S'); RubyClass theClass = _context.GetClassOf(obj); TestForAnonymous(theClass); WriteSymbol(theClass.Name); var names = obj.GetNames(); WriteInt32(names.Count); foreach (string name in names) { int index = obj.GetIndex(name); WriteSymbol(name); WriteAnObject(obj[index]); } }
public static MutableString/*!*/ Inspect(RubyStruct/*!*/ self) { RubyContext context = self.Class.Context; using (IDisposable handle = RubyUtils.InfiniteInspectTracker.TrackObject(self)) { // #<struct Struct::Foo name=nil, val=nil> MutableString str = MutableString.Create("#<struct "); str.Append(RubySites.Inspect(context, context.GetClassOf(self))); if (handle == null) { return str.Append(":...>"); } str.Append(' '); object[] data = self.Values; var members = self.GetNames(); for (int i = 0; i < data.Length; i++) { if (i != 0) { str.Append(", "); } str.Append(members[i]); str.Append("="); str.Append(RubySites.Inspect(context, data[i])); } str.Append('>'); return str; } }
public static Node ToYamlNode(RubyStruct/*!*/ self, [NotNull]RubyRepresenter/*!*/ rep) { var fieldNames = self.GetNames(); var fields = new Dictionary<Node, Node>(fieldNames.Count); for (int i = 0; i < fieldNames.Count; i++) { fields[rep.Scalar(null, fieldNames[i], ScalarQuotingStyle.None)] = rep.RepresentItem(self.Values[i]); } var map = new Dictionary<object, object>(); rep.AddYamlProperties(map, self, false); return rep.Map(fields, rep.GetTagUri(self), map, FlowStyle.Block); }