@Override
 public void encodeValue(
     final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues)
     throws IOException {
   int count = 0;
   for (final Integer i : BCF2Utils.toList(Integer.class, value)) {
     if (i != null) { // necessary because .,. => [null, null] in VC
       encoder.encodeRawInt(i, type);
       count++;
     }
   }
   for (; count < minValues; count++) encoder.encodeRawMissingValue(type);
 }
 @Override
 public void encodeValue(
     final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues)
     throws IOException {
   int count = 0;
   // TODO -- can be restructured to avoid toList operation
   if (isAtomic) {
     // fast path for fields with 1 fixed float value
     if (value != null) {
       encoder.encodeRawFloat((Double) value);
       count++;
     }
   } else {
     // handle generic case
     final List<Double> doubles = BCF2Utils.toList(Double.class, value);
     for (final Double d : doubles) {
       if (d != null) { // necessary because .,. => [null, null] in VC
         encoder.encodeRawFloat(d);
         count++;
       }
     }
   }
   for (; count < minValues; count++) encoder.encodeRawMissingValue(type);
 }
 @Override
 public BCF2Type getDynamicType(final Object value) {
   return value == null
       ? BCF2Type.INT8
       : BCF2Utils.determineIntegerType(BCF2Utils.toList(Integer.class, value));
 }