Example #1
0
        /// <summary>
        /// Write enum value.
        /// </summary>
        /// <param name="val">Enum value.</param>
        /// <param name="type">Enum type.</param>
        internal void WriteEnum(int val, Type type)
        {
            var desc = _marsh.GetDescriptor(type);

            _stream.WriteByte(BinaryTypeId.Enum);
            _stream.WriteInt(desc.TypeId);
            _stream.WriteInt(val);

            var binaryTypeHolder = Marshaller.GetCachedBinaryTypeHolder(desc.TypeId);

            if (binaryTypeHolder == null || !binaryTypeHolder.IsSaved)
            {
                // Save enum fields only once - they can't change locally at runtime.
                var metaHnd      = _marsh.GetBinaryTypeHandler(desc);
                var binaryFields = metaHnd.OnObjectWriteFinished();

                SaveMetadata(desc, binaryFields);
            }
        }