package divisors_example;

import popcorn.*;

public class PartialSumOfDivisorsPacket extends ComputationPacket {
    int n;
    int debugN1,debugN2;

    public PartialSumOfDivisorsPacket(int n, int n1, int n2, CompoundComputation parent) {
        super(new PartialSumOfDivisorsComputelet(n,n1,n2),parent);
        debugN1=n1;
        debugN2=n2;
    }

    public PartialSumOfDivisorsPacket(int n, int n1, int n2) {
        super(new PartialSumOfDivisorsComputelet(n,n1,n2));
    }

    public String toString() {
        return "sum(d|"+n+": d in "+debugN1+".."+debugN2+")";
    }

    public void completed() {
        reportResult(((Integer)getResult()).intValue());
        done();
    }

    public void reportResult(int sum) {
    }
}

class PartialSumOfDivisorsComputelet implements Computelet,java.io.Serializable {
    int n;
    int n1, n2;

    public PartialSumOfDivisorsComputelet(int n, int n1, int n2) {
        this.n=n;
        this.n1=n1;
        this.n2=n2;
    }

    public Object compute() {
        int sum=0;
        for (int i=n1; i<n2; i++)
            sum+= (n % i == 0) ? i : 0;
        return new Integer(sum);
    }
}


