package org.projectfloodlight.openflow.types;

import org.jboss.netty.buffer.ChannelBuffer;

public class OFMetadata implements OFValueType<OFMetadata> {

    static int LENGTH = 8;

    private final U64 u64;

    public static final OFMetadata NO_MASK = OFMetadata.of(U64.ofRaw(0xFFFFFFFFFFFFFFFFl));
    public static final OFMetadata FULL_MASK = OFMetadata.of(U64.ofRaw(0x0));

    public OFMetadata(U64 ofRaw) {
        u64 = ofRaw;
    }

    public static OFMetadata of(U64 u64) {
        return new OFMetadata(u64);
    }

    public static OFMetadata ofRaw(long raw) {
        return new OFMetadata(U64.ofRaw(raw));
    }

    public static OFMetadata read8Bytes(ChannelBuffer cb) {
        return OFMetadata.ofRaw(cb.readLong());
    }

    public void write8Bytes(ChannelBuffer cb) {
        u64.writeTo(cb);
    }

    @Override
    public int getLength() {
        return u64.getLength();
    }

    @Override
    public OFMetadata applyMask(OFMetadata mask) {
        return OFMetadata.of(this.u64.applyMask(mask.u64));
    }

    @Override
    public boolean equals(Object arg0) {
        if (!(arg0 instanceof OFMetadata))
            return false;
        OFMetadata other = (OFMetadata)arg0;

        return this.u64.equals(other.u64);
    }

    @Override
    public int hashCode() {
        int prime = 53;
        return this.u64.hashCode() * prime;
    }

    @Override
    public String toString() {
        return "Metadata: " + u64.toString();
    }



}
