public void Write <T>(SerializationCtx ctx, UnsafeWriter writer, T value) { #if !NET35 myBackgroundRegistrar.WaitForEmpty(); #endif if (value == null) { // ReSharper disable once ImpureMethodCallOnReadonlyValueField RdId.Nil.Write(writer); return; } RdId typeId; var type = value.GetType(); if (!myTypeMapping.TryGetValue(type, out typeId)) { myPolymorphicCatalog?.TryDiscoverRegister(type, this); if (!myTypeMapping.TryGetValue(type, out typeId)) { throw new KeyNotFoundException($"Type {type.FullName} have not registered"); } } typeId.Write(writer); // Don't dispose this cookie, otherwise it will delete all written data var cookie = new UnsafeWriter.Cookie(writer); writer.Write(0); var writerDelegate = myWriters[typeId]; writerDelegate(ctx, writer, value); cookie.WriteIntLengthToCookieStart(); }
public int[] Build(IPsiSourceFile sourceFile, SeldomInterruptChecker interruptChecker) { using (UnsafeWriter.Cookie unsafeWriterCookie = UnsafeWriter.NewThreadLocalWriter()) { TrigramIndexEntryBuilder indexEntryBuilder = new TrigramIndexEntryBuilder(unsafeWriterCookie); foreach (TrigramToken trigramToken in new BufferTrigramSource(new StringBuffer(ASSET_REFERENCE_IDENTIFIER))) { indexEntryBuilder.Add(trigramToken); } UnsafeIntArray entryData = indexEntryBuilder.Build(); return(entryData.ToIntArray()); } }
protected override void SendPkg(UnsafeWriter.Cookie cookie) { var pkg = cookie.CloneData(); BytesSent += pkg.Length; //strip length var data = new byte[pkg.Length - sizeof(int)]; Array.Copy(pkg, sizeof(int), data, 0, data.Length); myOutgoingMessages.Enqueue(new Message { Data = data }); if (AutoTransmitMode) { TransmitAllMessages(); } }
public static void WriteEnumerable <T>(this UnsafeWriter writer, CtxWriteDelegate <T> itemWriter, SerializationCtx ctx, IEnumerable <T> value) { if (value == null) { writer.Write(-1); return; } // // Don't dispose this cookie, otherwise it will delete all written data var cookie = new UnsafeWriter.Cookie(writer); cookie.Writer.Write(-1); // length int i = 0; foreach (var item in value) { ++i; itemWriter(ctx, writer, item); } cookie.WriteIntLengthToCookieStart(i); }
public int[] Build(IPsiSourceFile sourceFile, SeldomInterruptChecker interruptChecker) { var file = sourceFile.GetDominantPsiFile <UnityYamlLanguage>() as IYamlFile; if (file == null) { return(null); } using (UnsafeWriter.Cookie unsafeWriterCookie = UnsafeWriter.NewThreadLocalWriter()) { TrigramIndexEntryBuilder indexEntryBuilder = new TrigramIndexEntryBuilder(unsafeWriterCookie); foreach (var yamlDocument in file.Documents) { foreach (TrigramToken trigramToken in new BufferTrigramSource(yamlDocument.GetTextAsBuffer())) { indexEntryBuilder.Add(trigramToken); } } UnsafeIntArray entryData = indexEntryBuilder.Build(); return(entryData.ToIntArray()); } }
public void Put(UnsafeWriter.Cookie data) { Put(data.Data, data.Count); }
protected override void SendPkg(UnsafeWriter.Cookie cookie) { SendBuffer.Put(cookie); }
/// <summary> /// Actual send package: len(4 bytes) + id (8 bytes) + payload /// </summary> /// <param name="pkg">Package to transmit</param> protected abstract void SendPkg(UnsafeWriter.Cookie pkg);
public void TestNullWriterInCookie() { using (var cookie = new UnsafeWriter.Cookie()) { } }