class FloatIndexer implements ValueIndexer<Float> {

    private final Reference ref;
    private final FieldType fieldType;
    private String name;

    public FloatIndexer(Reference ref, FieldType fieldType) {
        this.ref = ref;
        this.name = ref.storageIdent();
        this.fieldType = fieldType;
    }

    @Override
    public void indexValue(Float value,
                           XContentBuilder xcontentBuilder,
                           Consumer<? super IndexableField> addField,
                           Map<ColumnIdent, Synthetic> synthetics,
                           Map<ColumnIdent, ColumnConstraint> toValidate) throws IOException {<FILL_FUNCTION_BODY>}
}

        xcontentBuilder.value(value);
        float floatValue = value.floatValue();
        if (ref.hasDocValues() && ref.indexType() != IndexType.NONE) {
            addField.accept(new FloatField(name, floatValue, fieldType.stored() ? Field.Store.YES : Field.Store.NO));
        } else {
            if (ref.indexType() != IndexType.NONE) {
                addField.accept(new FloatPoint(name, floatValue));
            }
            if (ref.hasDocValues()) {
                addField.accept(
                        new SortedNumericDocValuesField(name, NumericUtils.floatToSortableInt(floatValue))
                );
            } else {
                addField.accept(new Field(
                        FieldNamesFieldMapper.NAME,
                        name,
                        FieldNamesFieldMapper.Defaults.FIELD_TYPE));
            }
            if (fieldType.stored()) {
                addField.accept(new StoredField(name, floatValue));
            }
        }
    
<no_super_class>