All Downloads are FREE. Search and download functionalities are using the official Maven repository.

bt.bencoding.BEMapBuilder Maven / Gradle / Ivy

There is a newer version: 1.10
Show newest version
package bt.bencoding;

import bt.bencoding.model.BEMap;
import bt.bencoding.model.BEObject;

import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

class BEMapBuilder extends BEPrefixedTypeBuilder {

    private final Map> map;
    private BEStringBuilder keyBuilder;
    private BEObjectBuilder> valueBuilder;

    private Charset keyCharset;

    BEMapBuilder() {
        map = new HashMap<>();
        keyCharset = Charset.forName("UTF-8");
    }

    @Override
    protected boolean doAccept(int b) {

        if (keyBuilder == null) {
            keyBuilder = new BEStringBuilder();
        }
        if (valueBuilder == null) {
            if (!keyBuilder.accept(b)) {
                BEType valueType = BEParser.getTypeForPrefix((char) b);
                valueBuilder = BEParser.builderForType(valueType);
                return valueBuilder.accept(b);
            }
        } else {
            if (!valueBuilder.accept(b)) {
                map.put(keyBuilder.build().getValue(keyCharset), valueBuilder.build());
                keyBuilder = null;
                valueBuilder = null;
                return accept(b, false);
            }
        }
        return true;
    }

    @Override
    protected BEMap doBuild(byte[] content) {
        return new BEMap(content, map);
    }

    @Override
    protected boolean acceptEOF() {
        return keyBuilder == null && valueBuilder == null;
    }

    @Override
    public BEType getType() {
        return BEType.MAP;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy