view src/alice/test/codesegment/local/bitonicsort/OddPhase.java @ 213:3f20b6401823 working

remove error form bitonic
author one
date Wed, 27 Mar 2013 17:56:08 +0900
parents b5daccf36104
children 21bd8af1cf26
line wrap: on
line source

package alice.test.codesegment.local.bitonicsort;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;

public class OddPhase extends CodeSegment{
	private Receiver info0 = ids.create(CommandType.PEEK); // range
	private Receiver info1; 							   // Array1
	private Receiver info2; 							   // Array2
	private Receiver info3 = ids.create(CommandType.PEEK); // block_num
	//private Receiver info4 = ids.create(CommandType.PEEK); // last_block_num
	private Receiver info5 = ids.create(CommandType.PEEK); // sort_count
	private Receiver info6 = ids.create(CommandType.TAKE); // count
	
	
	public OddPhase(String key0,String key1,String key2,int index,String key6){
		info0.setKey(key0);
		info1 = ids.create(CommandType.TAKE);
		info1.setKey(key1,index);
		info2 = ids.create(CommandType.TAKE);
		info2.setKey(key2,index);
		info3.setKey("block_num");
		info5.setKey("sort_count");
		info6.setKey(key6);
	}
	
	@Override
	public void run() {
		RangeInfo info = info0.asClass(info0, RangeInfo.class);
		int sort_count = info5.asInteger(info5);
		int count = info6.asInteger(info6);
		//System.out.println("count is " +count);
		
		int i = info.range;
		if (count<sort_count){
			DataList list1 = info1.asClass(info1, DataList.class);
			DataList list2 = info2.asClass(info1, DataList.class);
			
			Sort.quickSort(list1,0,list1.table.length-1);
			Sort.quickSort(list2,0,list2.table.length-1);
			DataList.merge(list1,list2);
			
			ods.flip(info1);
			ods.flip(info2);

			
			
			if (i+2 < SetInfo.array.length){
				String f = (count%2==1) ? SetInfo.array[i] : SetInfo.array[i+1];
				String b = (count%2==1) ? SetInfo.array[i+1] : SetInfo.array[i+2];
				new OddPhase(info0.key, f, b,count,info6.key);
			}
		} else {
			ods.put(SetInfo.result[i*2], info1);
			ods.put(SetInfo.result[i*2+1], info2);
		}
		ods.update(info6.key, count+1);
		
		
	}
	
}