protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { _query = new Query(); _query.Name = input.ReadString(); _query.Subtype = input.ReadString(); _query.Exclusive = input.ReadBoolean(); // Read filters int filterCount = input.ReadInt32(); for (int i = 0; i < filterCount; i++) { var filter = Filter.GetFilterInstance(input.ReadUInt16()); if (filter == null) { continue; } filter.Deserialize(input); _query.AddFilter(filter); } // Carrier if (input.ReadBoolean()) { _query.Carrier = new Carrier(); _query.Carrier.Deserialize(input); } var complementRequest = new DeserializeRequest(); yield return(complementRequest); _query.Complement = complementRequest.Result; }
private static RantPackage LoadOldPackage(EasyReader reader) { int numPatterns = reader.ReadInt32(); int numTables = reader.ReadInt32(); if (numPatterns < 0 || numTables < 0) { throw new InvalidDataException("File is corrupt."); } var pkg = new RantPackage(); // Patterns for (int i = 0; i < numPatterns; i++) { var name = reader.ReadString(); var code = reader.ReadString(); pkg.AddPattern(new RantPattern(name, RantPatternOrigin.String, code)); } // Tables for (int i = 0; i < numTables; i++) { var name = reader.ReadString(); var subs = reader.ReadStringArray(); int numEntries = reader.ReadInt32(); var hiddenClasses = reader.ReadStringArray(); var entries = new RantDictionaryEntry[numEntries]; for (int j = 0; j < numEntries; j++) { int weight = reader.ReadInt32(); bool flags = reader.ReadBoolean(); // unused int numTerms = reader.ReadInt32(); var terms = new RantDictionaryTerm[numTerms]; for (int k = 0; k < numTerms; k++) { var value = reader.ReadString(); var pron = reader.ReadString(); terms[k] = new RantDictionaryTerm(value, pron); } var classes = reader.ReadStringArray(); entries[j] = new RantDictionaryEntry(terms, classes, weight); } pkg.AddTable(new RantDictionaryTable(name, subs, entries, hiddenClasses)); } return(pkg); }
public override void Deserialize(EasyReader input) { var options = RegexOptions.Compiled | RegexOptions.ExplicitCapture; Outcome = input.ReadBoolean(); options |= (RegexOptions)input.ReadInt32(); Regex = new Regex(input.ReadString(), options); }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { input.ReadString(out Name); var bodyRequest = new DeserializeRequest(); yield return(bodyRequest); Body = bodyRequest.Result; }
/// <summary> /// Reads a BSON document from the specified EasyReader. /// </summary> /// <param name="reader">The reader that will be used to read this document.</param> /// <returns>The document that was read.</returns> internal static BsonDocument Read(EasyReader reader, BsonDocument parent = null, bool inArray = false) { var stringTableMode = BsonStringTableMode.None; Dictionary <int, string> stringTable = null; if (parent == null) { var includesStringTable = reader.ReadBoolean(); if (includesStringTable) { stringTable = new Dictionary <int, string>(); stringTableMode = (BsonStringTableMode)reader.ReadByte(); var version = reader.ReadByte(); if (version != STRING_TABLE_VERSION) { throw new InvalidDataException("Unsupported string table version: " + version); } var tableLength = reader.ReadInt32(); var tableEntries = reader.ReadInt32(); for (var i = 0; i < tableEntries; i++) { var num = reader.ReadInt32(); var val = reader.ReadString(Encoding.UTF8); stringTable[num] = val; } } } else { stringTable = parent.ReverseStringTable; stringTableMode = parent.StringTableMode; } var document = new BsonDocument(stringTableMode, stringTable); var length = reader.ReadInt32(); while (!reader.EndOfStream) { var code = reader.ReadByte(); if (code == 0x00) // end of document { break; } var name = reader.ReadCString(); if (!inArray && document.StringTableMode != BsonStringTableMode.None) { name = document.ReverseStringTable[int.Parse(name)]; } var data = ReadItem(code, document, reader); document.Top[name] = data; } return(document); }
internal void Deserialize(EasyReader input) { int typeCount = input.ReadInt32(); for (int i = 0; i < typeCount; i++) { var type = input.ReadEnum <CarrierComponentType>(); int num = input.ReadInt32(); for (int j = 0; j < num; j++) { AddComponent(type, input.ReadString()); } } }
public override void Deserialize(EasyReader input) { int count = input.ReadInt32(); for (int i = 0; i < count; i++) { int swLength = input.ReadInt32(); var sw = new ClassFilterRule[swLength]; for (int j = 0; j < swLength; j++) { bool shouldMatch = input.ReadBoolean(); string clName = input.ReadString(); sw[j] = new ClassFilterRule(clName, shouldMatch); } _items.Add(sw); } }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { input.ReadInt32(out _argc); string funcName = input.ReadString(); _funcInfo = RantFunctionRegistry.GetFunction(funcName, _argc); if (_args == null) { _args = new List <RST>(_argc); } for (int i = 0; i < _argc; i++) { var request = new DeserializeRequest(); yield return(request); _args.Add(request.Result); } }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { var options = RegexOptions.Compiled | RegexOptions.ExplicitCapture; if (input.ReadBoolean()) { options |= RegexOptions.IgnoreCase; } _regex = new Regex(input.ReadString(), options); var request = new DeserializeRequest(); yield return(request); _rstSource = request.Result; request = new DeserializeRequest(); yield return(request); _rstMatchEval = request.Result; }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { var iterMain = base.Deserialize(input); while (iterMain.MoveNext()) { yield return(iterMain.Current); } int pCount = input.ReadInt32(); if (Parameters == null) { Parameters = new Dictionary <string, SubroutineParameterType>(pCount); } for (int i = 0; i < pCount; i++) { string key = input.ReadString(); Parameters[key] = (SubroutineParameterType)input.ReadByte(); } }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { var iterMain = base.Deserialize(input); while (iterMain.MoveNext()) { yield return(iterMain.Current); } int pCount = input.ReadInt32(); if (Parameters == null) { Parameters = new List <SubroutineParameter>(); } for (int i = 0; i < pCount; i++) { string paramName = input.ReadString(); var paramType = (SubroutineParameterType)input.ReadByte(); Parameters.Add(new SubroutineParameter(paramName, paramType)); } }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { var iterMain = base.Deserialize(input); while (iterMain.MoveNext()) { yield return(iterMain.Current); } input.ReadBoolean(out _inModule); input.ReadString(out _moduleFunctionName); int argc = input.ReadInt32(); if (Arguments == null) { Arguments = new List <RST>(argc); } for (int i = 0; i < argc; i++) { var request = new DeserializeRequest(); yield return(request); Arguments.Add(request.Result); } }
protected override IEnumerator <DeserializeRequest> Deserialize(EasyReader input) { Text = input.ReadString(); yield break; }
private static BsonItem ReadItem(byte code, BsonDocument document, EasyReader reader) { object val = null; switch (code) { case 0x01: // double val = reader.ReadDouble(); break; case 0x02: // string val = reader.ReadString(Encoding.UTF8).TrimEnd('\x00'); if (document.StringTableMode == BsonStringTableMode.KeysAndValues) { val = document.ReverseStringTable[int.Parse((string)val)]; } break; case 0x03: // document val = Read(reader, document).Top; break; case 0x04: // array val = Read(reader, document, true).Top; break; case 0x05: // binary var length = reader.ReadInt32(); var subtype = reader.ReadByte(); if (subtype != 0x00) { throw new NotSupportedException("BSON subtypes other than 'generic binary data' are not supported."); } val = reader.ReadBytes(length); break; case 0x06: // undefined break; case 0x07: // ObjectId // why does this parser support ObjectIds and not other binary data? // shhhhh val = Encoding.ASCII.GetString(reader.ReadBytes(12)); break; case 0x08: // boolean val = reader.ReadBoolean(); break; case 0x09: // UTC datetime val = reader.ReadInt64(); break; case 0x0A: // null break; case 0x0B: // regex // why are you using regex in a Rant package? throw new NotSupportedException("Regular expressions are not supported."); case 0x0C: // db pointer throw new NotSupportedException("DB pointers are not supported."); case 0x0D: // Javascript code case 0x0F: // JS code with scope throw new NotSupportedException("Javascript in BSON is not supported."); case 0x0E: // depreceated val = reader.ReadString(Encoding.UTF8); break; case 0x10: // 32 bit integer val = reader.ReadInt32(); break; case 0x11: // timestamp case 0x12: // 64 bit integer val = reader.ReadInt64(); break; case 0xFF: // min key case 0x7F: // max key // we don't care about these so let's just skip em break; } if (!(val is BsonItem)) { return new BsonItem(val) { Type = code } } ; var i = (BsonItem)val; i.Type = code; return(i); } }
/// <summary> /// Loads a package from the specified stream and returns it as a RantPackage object. /// </summary> /// <param name="source">The stream to load the package data from.</param> /// <returns></returns> public static RantPackage Load(Stream source) { using (var reader = new EasyReader(source)) { string magic = Encoding.ASCII.GetString(reader.ReadBytes(4)); if (magic != MAGIC) { throw new InvalidDataException(GetString("err-file-corrupt")); } ushort version = reader.ReadUInt16(); if (version != PACKAGE_FORMAT_VERSION) { throw new InvalidDataException(GetString("err-invalid-package-version", version)); } bool compress = reader.ReadBoolean(); var package = new RantPackage(); package.Title = reader.ReadString(); package.ID = reader.ReadString(); package.Description = reader.ReadString(); package.Tags = reader.ReadStringArray(); package.Authors = reader.ReadStringArray(); int vmaj = reader.ReadInt32(); int vmin = reader.ReadInt32(); int vrev = reader.ReadInt32(); package.Version = new RantPackageVersion(vmaj, vmin, vrev); int depCount = reader.ReadInt32(); for (int i = 0; i < depCount; i++) { var depId = reader.ReadString(); int depVerMaj = reader.ReadInt32(); int depVerMin = reader.ReadInt32(); int depVerRev = reader.ReadInt32(); bool depAllowNewer = reader.ReadBoolean(); package.AddDependency(new RantPackageDependency(depId, new RantPackageVersion(depVerMaj, depVerMin, depVerRev)) { AllowNewer = depAllowNewer }); } int resCount = reader.ReadInt32(); if (compress) { using (var decompressStream = new DeflateStream(reader.BaseStream, CompressionMode.Decompress, true)) { for (int i = 0; i < resCount; i++) { package._resources.Add(RantResource.DeserializeResource(new EasyReader(decompressStream, true))); } } } else { for (int i = 0; i < resCount; i++) { package._resources.Add(RantResource.DeserializeResource(reader)); } } return(package); } }
/// <summary> /// Loads a package from the specified stream and returns it as a RantPackage object. /// </summary> /// <param name="source">The stream to load the package data from.</param> /// <returns></returns> public static RantPackage Load(Stream source) { using (var reader = new EasyReader(source)) { if (Encoding.ASCII.GetString(reader.ReadBytes(4)) != Magic) throw new InvalidDataException("File is corrupt."); int numPatterns = reader.ReadInt32(); int numTables = reader.ReadInt32(); if (numPatterns < 0 || numTables < 0) throw new InvalidDataException("File is corrupt."); var pkg = new RantPackage(); // Patterns for (int i = 0; i < numPatterns; i++) { var name = reader.ReadString(); var code = reader.ReadString(); pkg.AddPattern(new RantPattern(name, RantPatternSource.String, code)); } // Tables for (int i = 0; i < numTables; i++) { var name = reader.ReadString(); var subs = reader.ReadStringArray(); int numEntries = reader.ReadInt32(); var hiddenClasses = reader.ReadStringArray(); var entries = new RantDictionaryEntry[numEntries]; for (int j = 0; j < numEntries; j++) { int weight = reader.ReadInt32(); bool flags = reader.ReadBoolean(); // unused int numTerms = reader.ReadInt32(); var terms = new RantDictionaryTerm[numTerms]; for (int k = 0; k < numTerms; k++) { var value = reader.ReadString(); var pron = reader.ReadString(); terms[k] = new RantDictionaryTerm(value, pron); } var classes = reader.ReadStringArray(); entries[j] = new RantDictionaryEntry(terms, classes, weight); } pkg.AddTable(new RantDictionaryTable(name, subs, entries, hiddenClasses)); } return pkg; } }
internal override void DeserializeData(EasyReader reader) { this.Name = reader.ReadString(); this.Language = reader.ReadString(); this.TermsPerEntry = reader.ReadInt32(); for (int i = 0; i < TermsPerEntry; i++) { foreach (var subtype in reader.ReadStringArray()) { AddSubtype(subtype, i); } } _hidden.AddRange(reader.ReadStringArray()); int numEntries = reader.ReadInt32(); for (int i = 0; i < numEntries; i++) { var terms = new RantDictionaryTerm[TermsPerEntry]; for (int j = 0; j < TermsPerEntry; j++) { var value = reader.ReadString(); var pron = reader.ReadString(); int valueSplit = reader.ReadInt32(); int pronSplit = reader.ReadInt32(); terms[j] = new RantDictionaryTerm(value, pron, valueSplit, pronSplit); } float weight = reader.ReadSingle(); var entry = new RantDictionaryEntry(terms) { Weight = weight }; foreach (var reqClass in reader.ReadStringArray()) { entry.AddClass(reqClass, false); } foreach (var optClass in reader.ReadStringArray()) { entry.AddClass(optClass, true); } int metaCount = reader.ReadInt32(); for (int j = 0; j < metaCount; j++) { bool isArray = reader.ReadBoolean(); var key = reader.ReadString(); if (isArray) { entry.SetMetadata(key, reader.ReadStringArray()); } else { entry.SetMetadata(key, reader.ReadString()); } } AddEntry(entry); } }
private static BsonItem ReadItem(byte code, BsonDocument document, EasyReader reader) { object val = null; switch (code) { case 0x01: // double val = reader.ReadDouble(); break; case 0x02: // string val = reader.ReadString(Encoding.UTF8).TrimEnd('\x00'); if (document.StringTableMode == BsonStringTableMode.KeysAndValues) val = document.ReverseStringTable[int.Parse((string)val)]; break; case 0x03: // document val = Read(reader, document).Top; break; case 0x04: // array val = Read(reader, document, true).Top; break; case 0x05: // binary var length = reader.ReadInt32(); var subtype = reader.ReadByte(); if (subtype != 0x00) throw new NotSupportedException("BSON subtypes other than 'generic binary data' are not supported."); val = reader.ReadBytes(length); break; case 0x06: // undefined break; case 0x07: // ObjectId // why does this parser support ObjectIds and not other binary data? // shhhhh val = Encoding.ASCII.GetString(reader.ReadBytes(12)); break; case 0x08: // boolean val = reader.ReadBoolean(); break; case 0x09: // UTC datetime val = reader.ReadInt64(); break; case 0x0A: // null break; case 0x0B: // regex // why are you using regex in a Rant package? throw new NotSupportedException("Regular expressions are not supported."); case 0x0C: // db pointer throw new NotSupportedException("DB pointers are not supported."); case 0x0D: // Javascript code case 0x0F: // JS code with scope throw new NotSupportedException("Javascript in BSON is not supported."); case 0x0E: // depreceated val = reader.ReadString(Encoding.UTF8); break; case 0x10: // 32 bit integer val = reader.ReadInt32(); break; case 0x11: // timestamp case 0x12: // 64 bit integer val = reader.ReadInt64(); break; case 0xFF: // min key case 0x7F: // max key // we don't care about these so let's just skip em break; } if (!(val is BsonItem)) return new BsonItem(val) { Type = code }; var i = (BsonItem)val; i.Type = code; return i; }
/// <summary> /// Reads a BSON document from the specified EasyReader. /// </summary> /// <param name="reader">The reader that will be used to read this document.</param> /// <returns>The document that was read.</returns> internal static BsonDocument Read(EasyReader reader, BsonDocument parent = null, bool inArray = false) { var stringTableMode = BsonStringTableMode.None; Dictionary<int, string> stringTable = null; if (parent == null) { var includesStringTable = reader.ReadBoolean(); if (includesStringTable) { stringTable = new Dictionary<int, string>(); stringTableMode = (BsonStringTableMode)reader.ReadByte(); var version = reader.ReadByte(); if (version != STRING_TABLE_VERSION) throw new InvalidDataException("Unsupported string table version: " + version); var tableLength = reader.ReadInt32(); var tableEntries = reader.ReadInt32(); for (var i = 0; i < tableEntries; i++) { var num = reader.ReadInt32(); var val = reader.ReadString(Encoding.UTF8); stringTable[num] = val; } } } else { stringTable = parent.ReverseStringTable; stringTableMode = parent.StringTableMode; } var document = new BsonDocument(stringTableMode, stringTable); var length = reader.ReadInt32(); while(!reader.EndOfStream) { var code = reader.ReadByte(); if (code == 0x00) // end of document break; var name = reader.ReadCString(); if (!inArray && document.StringTableMode != BsonStringTableMode.None) name = document.ReverseStringTable[int.Parse(name)]; var data = ReadItem(code, document, reader); document.Top[name] = data; } return document; }
internal override void DeserializeData(EasyReader reader) { Name = reader.ReadString(); SyntaxTree = RST.DeserializeRST(reader); }