view src/main/java/alice/codesegment/OutputDataSegment.java @ 599:3284428f525e dispose

add MetaCodeSegment & MetaDSM
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 15 Feb 2016 01:16:35 +0900
parents 8c17a9e66cc7
children
line wrap: on
line source

package alice.codesegment;

import alice.datasegment.CommandType;
import alice.datasegment.DataSegment;
import alice.datasegment.ReceiveData;
import alice.datasegment.Receiver;
import alice.datasegment.SendOption;

public class OutputDataSegment {

    private String metaState = "";

    /**
     * input→ds変更→outputのときコピーを防ぐ
     */
    public void setMeta(){
        metaState = "meta";
    }

    public void flip(Receiver receiver) {
        if (receiver.isCompressed()){
            DataSegment.get(metaState + "compressedlocal").put(receiver.key, receiver.getReceiveData(), false);
        } else {
            DataSegment.get(metaState + "local").put(receiver.key, receiver.getReceiveData(), false);
        }
    }

    public void flip(String managerKey, String key, Receiver receiver){

        receiver.setMeta(metaState != "");

        if (receiver.isCompressed()){
            if (!managerKey.startsWith("compressed")){
                managerKey = "compressed" + managerKey;
            }
            DataSegment.get(metaState + managerKey).put(key, receiver.getReceiveData(), false);
        } else {
            DataSegment.get(metaState + managerKey).put(key, receiver.getReceiveData(), false);
        }

    }

    public void flip(Receiver receiver, CommandType type) {

        receiver.setMeta(metaState != "");

        switch (type) {
            case PUT:
                if (receiver.isCompressed()){
                    DataSegment.getCompressedLocal().put(receiver.key, receiver.getReceiveData(), false);//localなら全部false。
                } else {
                    DataSegment.getLocal().put(receiver.key, receiver.getReceiveData(), false);
                }
                break;
            case UPDATE:
                if (receiver.isCompressed()){
                    DataSegment.getCompressedLocal().update(receiver.key, receiver.getReceiveData(), false);
                } else {
                    DataSegment.getLocal().update(receiver.key, receiver.getReceiveData(), false);
                }

                break;
            default:
                break;
        }
    }

    public void put(String key, ReceiveData rData) {
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + "local").put(key, rData, false);
    }

    public void put(String key, Object val) {
        ReceiveData rData = new ReceiveData(val);
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + "local").put(key, rData, false);
    }

    public void update(String key, Object val) {
        ReceiveData rData = new ReceiveData(val);
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + "local").update(key, rData, false);
    }

    /**
     * for remote
     */
    public void put(String managerKey, String key, ReceiveData rData) {
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).put(key, rData, false);
    }

    public void put(String managerKey, String key, Object val) {//追加
        ReceiveData rData = new ReceiveData(val);
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).put(key, rData, false);
    }

    public void quickPut(String managerKey, String key, ReceiveData rData) {
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).put(key, rData, true);
    }

    public void quickPut(String managerKey, String key, Object val) {
        ReceiveData rData = new ReceiveData(val);
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).put(key, rData, true);
    }

    public void update(String managerKey, String key, ReceiveData rData) {
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).update(key, rData, false);
    }

    public void update(String managerKey, String key, Object val) {
        ReceiveData rData = new ReceiveData(val);
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).update(key, rData, false);
    }

    public void quickUpdate(String managerKey, String key, ReceiveData rData) {
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).update(key, rData, true);
    }

    public void quickUpdate(String managerKey, String key, Object val, boolean cFlag) {
        ReceiveData rData = new ReceiveData(val);
        rData.setMeta(metaState != "");
        DataSegment.get(metaState + managerKey).update(key, rData, true);
    }

    /**
     * kill the Alice process after send other messages.
     *
     * @param managerKey
     */

    public void finish(String managerKey) {
        if (DataSegment.contains(managerKey))
            DataSegment.get(managerKey).finish();
    }

    /**
     * close socket for RemoteDataSegment after send other messages.
     *
     * @param managerKey
     */

    public void close(String managerKey) {
        if (DataSegment.contains(managerKey))
            DataSegment.get(managerKey).close();
    }

    /**
     * "key" is not remote DataSegment's key.
     * "Ping Response" return in this "key"
     *
     * @param managerKey
     * @param returnKey
     */
    public void ping(String managerKey, String returnKey) {
        if (DataSegment.contains(managerKey))
            DataSegment.get(managerKey).ping(returnKey);
    }

}