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

com.tinkerpop.gremlin.giraph.process.computer.util.RuleWritable Maven / Gradle / Ivy

package com.tinkerpop.gremlin.giraph.process.computer.util;

import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.tinkerpop.gremlin.giraph.Constants;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableUtils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/**
 * @author Marko A. Rodriguez (http://markorodriguez.com)
 */
public class RuleWritable implements Writable {

    public enum Rule {
        OR, AND, INCR, SET, SET_IF_ABSENT
    }

    private Rule rule;
    private Object object;

    public RuleWritable() {

    }

    public RuleWritable(final Rule rule, final Object object) {
        this.rule = rule;
        this.object = object;
    }

    public  T getObject() {
        return (T) this.object;
    }

    public Rule getRule() {
        return this.rule;
    }

    public void readFields(final DataInput input) throws IOException {
        this.rule = Rule.values()[WritableUtils.readVInt(input)];
        int objectLength = WritableUtils.readVInt(input);
        byte[] bytes = new byte[objectLength];
        for (int i = 0; i < objectLength; i++) {
            bytes[i] = input.readByte();
        }
        final Input in = new Input(new ByteArrayInputStream(bytes));
        this.object = Constants.KRYO.readClassAndObject(in);
        in.close();
    }

    public void write(final DataOutput output) throws IOException {
        final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        final Output out = new Output(outputStream);
        Constants.KRYO.writeClassAndObject(out, this.object);
        out.flush();
        WritableUtils.writeVInt(output, this.rule.ordinal());
        WritableUtils.writeVInt(output, outputStream.toByteArray().length);
        output.write(outputStream.toByteArray());
        out.close();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy