コード例 #1
0
        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();
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
ファイル: TestWire.cs プロジェクト: epeshk/rd
        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();
            }
        }
コード例 #4
0
ファイル: SerializersEx.cs プロジェクト: yvvan/rd
        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);
        }
コード例 #5
0
        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());
            }
        }
コード例 #6
0
 public void Put(UnsafeWriter.Cookie data)
 {
     Put(data.Data, data.Count);
 }
コード例 #7
0
ファイル: SocketWire.cs プロジェクト: epeshk/rd
 protected override void SendPkg(UnsafeWriter.Cookie cookie)
 {
     SendBuffer.Put(cookie);
 }
コード例 #8
0
 /// <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);
コード例 #9
0
 public void TestNullWriterInCookie()
 {
     using (var cookie = new UnsafeWriter.Cookie())
     {
     }
 }