git @ Cat's Eye Technologies Whothm / master src / Machine.java
master

Tree @master (Download .tar.gz)

Machine.java @masterraw · history · blame

package tc.catseye.whothm;

import java.util.ArrayList;

abstract class Command {
    public abstract void execute(Machine m);
}

class DrawCommand extends Command {
    private Rectangle r;
    private TruthTable tt;

    public DrawCommand(Rectangle r, TruthTable tt) {
        this.r = r;
        this.tt = tt;
    }

    public void execute(Machine m) {
        r.draw(m.bitmap, tt);
    }
    
    public String toString() {
        return "DrawCommand(r=" + r.toString() + ",tt=" + tt.toString() + ")";
    }
}

class DeltaCommand extends Command {
    private Rectangle r;
    private String memberName;
    private int delta;

    public DeltaCommand(Rectangle r, String memberName, int delta) {
        this.r = r;
        this.memberName = memberName;
        this.delta = delta;
    }

    public void execute(Machine m) {
        r.deltaMember(memberName, delta);
    }

    public String toString() {
        return "DeltaCommand(r=" + r.toString() + ",m=" + memberName + ",d=" + delta + ")";
    }
}

class DeltaIndirectCommand extends Command {
    private Rectangle destRect, srcRect;
    private String destMember, srcMember;

    public DeltaIndirectCommand(Rectangle destRect, String destMember,
                                Rectangle srcRect, String srcMember) {
        this.destRect = destRect;
        this.destMember = destMember;
        this.srcRect = srcRect;
        this.srcMember = srcMember;
    }

    public void execute(Machine m) {
        destRect.deltaMember(destMember, srcRect.getMember(srcMember));
    }

    public String toString() {
        return "DeltaIndirectCommand(srcR=" + srcRect.toString() + ",srcM=" + srcMember +
                                   ",destR=" + destRect.toString() + ",destM=" + destMember + ")";
    }
}

public class Machine {
    public BitMap bitmap;
    private ArrayList<Command> commands;

    public Machine() {
        this.bitmap = null;
        commands = new ArrayList<Command>();
    }
 
    public void addDrawCommand(Rectangle r, TruthTable tt) {
        commands.add(new DrawCommand(r, tt));
    }

    public void addDeltaCommand(Rectangle r, String memberName, int delta) {
        commands.add(new DeltaCommand(r, memberName, delta));
    }

    public void addDeltaIndirectCommand(Rectangle destRect, String destMember,
                                        Rectangle srcRect, String srcMember) {
        commands.add(new DeltaIndirectCommand(destRect, destMember,
                                              srcRect, srcMember));
    }

    public void run(BitMap bitmap) {
        this.bitmap = bitmap;
        for (int i = 0; i < 100; i++) {
            for (Command c : commands) {
                c.execute(this);
            }
        }
    }

    public String toString() {
        String k = "Machine(\n";
        for (Command c : commands) {
            k += "  " + c.toString() + "\n";
        }
        return k + ")";
    }
}