view src/alice/test/codesegment/local/bitonicsort/OddPhase.java @ 230:23b062c43041

bitonicSort may success
author sugi
date Fri, 29 Mar 2013 00:38:47 +0900
parents 4ece0dca75e7
children 783946721e0d
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(RangeInfo.class);
		DataList list1 = info1.asClass(DataList.class);
		DataList list2 = info2.asClass(DataList.class);
		int sort_count = info5.asInteger();
		int count = info6.asInteger();
		
		int i = info.range;
		//System.out.println("CS"+i+" "+info1.key+" "+info2.key+" dataIndex "+info1.index +" count "+count);
		Sort.quickSort(list1);
		Sort.quickSort(list2);
		DataList.merge(list1,list2);
		
		if (count%2==0&&i==0){
			ods.flip(info1);
		} else if (count%2==0&&info.lastFlag){
			ods.flip(info2);
		}
		ods.flip(info1);
		ods.flip(info2);
		
		if (count+1>=sort_count/2){
			
		} else if (count%2==0&&info.lastFlag&&count+2<sort_count/2){
			new OddPhase(info0.key, info1.key, info2.key,count+2,info6.key);
			ods.update(info6.key, count+2);
		} else {
			String f = (count%2==1) ? SetInfo.array[2*i] : SetInfo.array[2*i+1];
			String b = (count%2==1) ? SetInfo.array[2*i+1] : SetInfo.array[2*i+2];
			
			new OddPhase(info0.key, f, b, count+1, info6.key);
			ods.update(info6.key, count+1);
		}
		
		
	}
	
}