Esempio n. 1
0
        private object GetValue(object value)
        {
            if (value == null)
            {
                return(null);
            }

            // Check for primitive type.

            PrimitiveTypeInfo typeInfo = PrimitiveTypeInfo.GetPrimitiveTypeInfo(value.GetType());

            if (typeInfo != null)
            {
                return(TypeClone.Clone(value));
            }

            // Check if it is instrumentable.

            IInstrumentable instrumentable = value as IInstrumentable;

            if (instrumentable != null)
            {
                InstrumentationDetails details = new InstrumentationDetails();
                instrumentable.Write(details);
                return(details);
            }

            // Return the string.

            return(value.ToString());
        }
Esempio n. 2
0
        private bool WriteInstrumentableParameter(BinaryWriter writer)
        {
            // Ask it.

            IInstrumentable instrumentable = m_value as IInstrumentable;

            if (instrumentable == null)
            {
                return(false);
            }

            // Ask it to save its details.

            InstrumentationDetails details = new InstrumentationDetails();

            instrumentable.Write(details);

            // Write to a stream.

            IBinarySerializable serializable = details;
            MemoryStream        stream       = new MemoryStream();

            using (BinaryWriter valueWriter = new BinaryWriter(stream))
            {
                serializable.Write(valueWriter);
                WriteValueInfo(writer, new ClassInfo(typeof(InstrumentationDetails)), ValueFormat.LinkMeBinary);
                BinaryWriteAdaptor adaptor = new BinaryWriteAdaptor(writer);
                adaptor.Write(stream.ToArray());
            }

            return(true);
        }
Esempio n. 3
0
        private void Write(BinaryWriteAdaptor adaptor, List <InstrumentationEntry> entries)
        {
            adaptor.Write(entries.Count);
            foreach (InstrumentationEntry entry in entries)
            {
                // Key.

                if (entry.Key == null)
                {
                    adaptor.Write(true);
                }
                else
                {
                    adaptor.Write(false);
                    adaptor.Write(entry.Key);
                }

                // Value.

                if (entry.Value == null)
                {
                    adaptor.Write(true);
                }
                else
                {
                    adaptor.Write(false);
                    InstrumentationDetails details = entry.Value as InstrumentationDetails;
                    if (details != null)
                    {
                        adaptor.Write(true);
                        Write(adaptor, details.m_entries);
                    }
                    else
                    {
                        adaptor.Write(false);
                        adaptor.Write(entry.Value);
                    }
                }
            }
        }
Esempio n. 4
0
        private void Read(BinaryReadAdaptor adaptor, List <InstrumentationEntry> entries)
        {
            int count = adaptor.ReadInt32();

            for (int index = 0; index < count; ++index)
            {
                string key   = null;
                object value = null;

                // Key.

                if (!adaptor.ReadBoolean())
                {
                    key = adaptor.ReadString();
                }

                // Value.

                if (!adaptor.ReadBoolean())
                {
                    if (adaptor.ReadBoolean())
                    {
                        // Details.

                        InstrumentationDetails details = new InstrumentationDetails();
                        Read(adaptor, details.m_entries);
                        value = details;
                    }
                    else
                    {
                        value = adaptor.ReadObject();
                    }
                }

                entries.Add(new InstrumentationEntry(key, value));
            }
        }