BTDB.ODBLayer.TableInfo.CreateFreeContent C# (CSharp) Method

CreateFreeContent() private method

private CreateFreeContent ( uint version ) : Tuple,IList>>
version uint
return Tuple,IList>>
        Tuple<bool, Action<IInternalObjectDBTransaction, DBObjectMetadata, AbstractBufferedReader, IList<ulong>, IList<ulong>>> CreateFreeContent(uint version)
        {
            EnsureClientTypeVersion();
            var method = ILBuilder.Instance.NewMethod<Action<IInternalObjectDBTransaction, DBObjectMetadata,
                AbstractBufferedReader, IList<ulong>, IList<ulong>>>($"FreeContent_{Name}_{version}");
            var ilGenerator = method.Generator;
            var tableVersionInfo = _tableVersions.GetOrAdd(version, version1 => _tableInfoResolver.LoadTableVersionInfo(_id, version1, Name));
            var needsFreeContent = false;
            var anyNeedsCtx = tableVersionInfo.NeedsCtx();
            if (anyNeedsCtx)
            {
                ilGenerator.DeclareLocal(typeof(IReaderCtx));
                ilGenerator
                    .Ldarg(0)
                    .Ldarg(2)
                    .Ldarg(3)
                    .Ldarg(4)
                    .Newobj(() => new DBReaderWithFreeInfoCtx(null, null, null, null))
                    .Stloc(0);
            }
            for (int fi = 0; fi < tableVersionInfo.FieldCount; fi++)
            {
                var srcFieldInfo = tableVersionInfo[fi];
                Action<IILGen> readerOrCtx;
                if (srcFieldInfo.Handler.NeedsCtx())
                    readerOrCtx = il => il.Ldloc(0);
                else
                    readerOrCtx = il => il.Ldarg(2);
                var needsFree = srcFieldInfo.Handler.FreeContent(ilGenerator, readerOrCtx);
                needsFreeContent |= needsFree;
            }
            ilGenerator.Ret();
            return Tuple.Create(needsFreeContent, method.Create());
        }