Npgsql.FrontendMessages.BindMessage.WriteParameters C# (CSharp) Method

WriteParameters() private method

private WriteParameters ( WriteBuffer buf, DirectBuffer &directBuf ) : bool
buf WriteBuffer
directBuf DirectBuffer
return bool
        bool WriteParameters(WriteBuffer buf, ref DirectBuffer directBuf)
        {
            for (; _paramIndex < InputParameters.Count; _paramIndex++)
            {
                var param = InputParameters[_paramIndex];

                if (!_wroteParamLen)
                {
                    if (param.Value is DBNull)
                    {
                        if (buf.WriteSpaceLeft < 4) { return false; }
                        buf.WriteInt32(-1);
                        continue;
                    }

                    param.LengthCache?.Rewind();
                }

                var handler = param.Handler;

                var asChunkingWriter = handler as IChunkingTypeHandler;
                if (asChunkingWriter != null)
                {
                    if (!_wroteParamLen)
                    {
                        if (buf.WriteSpaceLeft < 4) { return false; }
                        buf.WriteInt32(param.ValidateAndGetLength());
                        asChunkingWriter.PrepareWrite(param.Value, buf, param.LengthCache, param);
                        _wroteParamLen = true;
                    }
                    if (!asChunkingWriter.Write(ref directBuf)) {
                        return false;
                    }
                    _wroteParamLen = false;
                    continue;
                }

                var len = param.ValidateAndGetLength();
                var asSimpleWriter = (ISimpleTypeHandler)handler;
                if (buf.WriteSpaceLeft < len + 4)
                {
                    Contract.Assume(buf.Size >= len + 4);
                    return false;
                }
                buf.WriteInt32(len);
                asSimpleWriter.Write(param.Value, buf, param);
            }
            return true;
        }