Hi,

Are you sure it's a bug?

Is there any possibility of being something something else in my code?

Best regards,

Nuno


Look below

Concrete:

package section3.raytracer;

public aspect ReplicateConcrete extends Replicate<JGFRayTracerBench> {
        
protected pointcut broadcast(JGFRayTracerBench servant) : call(* *.setScene(..)) && target(servant) /*within*/;
}

Abstract:

package section3.raytracer;

import java.util.HashMap;
import java.util.Vector;

public abstract aspect Replicate<T> {
        int numberOfWorkers=4;
        
        HashMap <T,Vector<T>> aggregates = new HashMap<T,Vector<T>>();
        HashMap <Integer,T> id = new HashMap<Integer,T>();
        
        boolean debug = true;

        protected pointcut broadcast(T servant);  // broadcast funtion

        protected pointcut scatter(T servant, Object arg); // scatter function

        protected pointcut reduce(T servant); // reduction function     
        
        
        T around() : call( T.new() ) {
        
if (debug) System.out.println("Number of workers: " + numberOfWorkers);
                
System.out.println("Creating aggregate of " + numberOfWorkers + " workers");
                
                Vector <T>elements = new Vector<T>();
                T target = proceed();   // create aggregate representative
                setId(0,target);
                elements.add(target);
                
                for(int i=1; i<numberOfWorkers; i++) {
                        System.out.println("Creating aggregate worker number: " 
+ i);
                        
                        T targetn = proceed();
                        //T targetn = new T();
if (debug) System.out.println("Memory address for worker with id " + i + ": " + targetn);
                        setId(i,targetn);
                        elements.add(targetn);
                }
                
                aggregates.put(target,elements);
                
                return(target);
        }
        
        void around(T servant): broadcast(servant) {
                if (debug) System.out.println("Broadcasting...");
                
                for(int i=0; i<numberOfWorkers; i++) {
                        Vector<T> elements = aggregates.get(servant);
                        final T obj = elements.elementAt(i);
                }
                
                proceed(servant);       
        }
        
        public Object getId(int i) {
                return id.get(i);
        }
        
        public void setId(int i,T b) {
                id.put(i,b);
        }
}

_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to