Ejemplo n.º 1
0
 public EnumFormatterImplementor(TypeProvider provider)
 {
     this.module        = provider.Module;
     this.writerHelper  = provider.MessagePackWriterHelper;
     this.readerHelper  = provider.MessagePackReaderHelper;
     this.importer      = provider.Importer;
     this.optionsHelper = provider.MessagePackSerializerOptionsHelper;
     this.provider      = provider;
 }
Ejemplo n.º 2
0
 public UnionInterfaceFormatterAllConsequentImplementor(ModuleDefinition module, SystemObjectHelper objectHelper, InterfaceMessagePackFormatterHelper interfaceMessagePackFormatterHelper, SystemInvalidOperationExceptionHelper invalidOperationExceptionHelper, ModuleImporter importer, MessagePackSecurityHelper securityHelper, MessagePackSerializerOptionsHelper messagePackSerializerOptionsHelper, MessagePackWriterHelper writerHelper, MessagePackReaderHelper readerHelper, FormatterResolverExtensionHelper formatterResolverExtensionHelper, FixedTypeKeyInt32ValueHashtableGenerator generator)
 {
     this.module       = module;
     this.objectHelper = objectHelper;
     this.interfaceMessagePackFormatterHelper = interfaceMessagePackFormatterHelper;
     this.invalidOperationExceptionHelper     = invalidOperationExceptionHelper;
     this.importer       = importer;
     this.securityHelper = securityHelper;
     this.messagePackSerializerOptionsHelper = messagePackSerializerOptionsHelper;
     this.writerHelper = writerHelper;
     this.readerHelper = readerHelper;
     this.formatterResolverExtensionHelper = formatterResolverExtensionHelper;
     this.generator = generator;
 }
Ejemplo n.º 3
0
        public static void SerializeFixedSizeBuffer(ILProcessor processor, ParameterDefinition valueParam, FieldReference fixedFieldImportedReference, ModuleDefinition module, MessagePackWriterHelper writer, FixedSizeBufferElementType elementType, int count, ref VariableDefinition notPinnedVariable)
#endif
        {
            var writingElement = writer.WriteMessagePackPrimitive(GetType(module, elementType));
            var ldInd          = LdInd(elementType);
            var stride         = SizeOf(elementType);

            processor.Append(Instruction.Create(OpCodes.Ldarg_1));                             // { writer }
            processor.Append(InstructionUtility.LdcI4(count));                                 // { writer, int32 }
            processor.Append(Instruction.Create(OpCodes.Call, writer.WriteArrayHeaderInt));    // { }

            processor.Append(Instruction.Create(OpCodes.Ldarg_1));                             // { writer }
            processor.Append(Instruction.Create(OpCodes.Ldarga_S, valueParam));                // { writer, value& }
            processor.Append(Instruction.Create(OpCodes.Ldflda, fixedFieldImportedReference)); // { writer, field& }
            processor.Append(Instruction.Create(OpCodes.Conv_U));                              // { writer, native uint }

            if (count == 1)
            {
                processor.Append(Instruction.Create(ldInd));                        // { writer, binary }
                processor.Append(Instruction.Create(OpCodes.Call, writingElement)); // { }
            }
            else
            {
                if (notPinnedVariable is null)
                {
                    notPinnedVariable = new VariableDefinition(module.TypeSystem.IntPtr);
                    processor.Body.Variables.Add(notPinnedVariable);
                }

                processor.Append(Instruction.Create(OpCodes.Dup));                  // { writer, native uint, native uint }
                processor.Append(InstructionUtility.Store(notPinnedVariable));      // { writer, native uint }
                processor.Append(Instruction.Create(ldInd));                        // { writer, binary }
                processor.Append(Instruction.Create(OpCodes.Call, writingElement)); // { }

                for (var i = 1; i < count; i++)
                {
                    processor.Append(Instruction.Create(OpCodes.Ldarg_1));        // { writer }
                    processor.Append(InstructionUtility.Load(notPinnedVariable)); // { writer, native uint }
                    processor.Append(InstructionUtility.LdcI4(stride));           // { writer, native uint, int32 }
                    processor.Append(Instruction.Create(OpCodes.Add));            // { writer, native uint }
                    if (i != count - 1)
                    {
                        processor.Append(Instruction.Create(OpCodes.Dup));             // { writer, native int, native int }
                        processor.Append(InstructionUtility.Store(notPinnedVariable)); // { writer, native int }
                    }

                    processor.Append(Instruction.Create(ldInd));                        // { writer, binary }
                    processor.Append(Instruction.Create(OpCodes.Call, writingElement)); // { }
                }
            }
        }
Ejemplo n.º 4
0
 public static void SerializeFixedSizeBuffer(ILProcessor processor, ParameterDefinition valueParam, FieldReference fixedFieldImportedReference, ModuleDefinition module, MessagePackWriterHelper writer, FixedSizeBufferElementType elementType, int count, ref VariableDefinition?notPinnedVariable)