Example #1
0
        public override byte[] Encode(FieldValue fieldValue, Group encodeTemplate, Context context, BitVectorBuilder presenceMapBuilder)
        {
            var priorValue    = context.Lookup(Dictionary, encodeTemplate, Key);
            var value_Renamed = (ScalarValue)fieldValue;

            if (!operatorCodec.CanEncode(value_Renamed, this))
            {
                Global.HandleError(Error.FastConstants.D3_CANT_ENCODE_VALUE, "The scalar " + this + " cannot encode the value " + value_Renamed);
            }
            var valueToEncode = operatorCodec.GetValueToEncode(value_Renamed, priorValue, this, presenceMapBuilder);

            if (operator_Renamed.ShouldStoreValue(value_Renamed))
            {
                context.Store(Dictionary, encodeTemplate, Key, value_Renamed);
            }
            if (valueToEncode == null)
            {
                return(new byte[0]);
            }
            byte[] encoding = typeCodec.Encode(valueToEncode);
            if (context.TraceEnabled && encoding.Length > 0)
            {
                context.GetEncodeTrace().Field(this, fieldValue, valueToEncode, encoding, presenceMapBuilder.Index);
            }
            return(encoding);
        }