diff src/alice/test/codesegment/local/bitonicsort/OddPhase.java @ 211:b8f72b378f18 working

refactor bintonic sort
author one
date Wed, 27 Mar 2013 16:39:51 +0900
parents 214a13d5ee31
children b5daccf36104
line wrap: on
line diff
--- a/src/alice/test/codesegment/local/bitonicsort/OddPhase.java	Wed Mar 27 14:45:59 2013 +0900
+++ b/src/alice/test/codesegment/local/bitonicsort/OddPhase.java	Wed Mar 27 16:39:51 2013 +0900
@@ -13,14 +13,6 @@
 	private Receiver info5 = ids.create(CommandType.PEEK); // sort_count
 	private Receiver info6 = ids.create(CommandType.TAKE); // count
 	
-	public OddPhase(String key0 ,String key1 ,int index,String key6){
-		info0.setKey(key0);
-		info1 = ids.create(CommandType.TAKE);
-		info1.setKey(key1,index);
-		info3.setKey("block_num");
-		info5.setKey("sort_count");
-		info6.setKey(key6);
-	}
 	
 	public OddPhase(String key0,String key1,String key2,int index,String key6){
 		info0.setKey(key0);
@@ -36,61 +28,36 @@
 	@Override
 	public void run() {
 		RangeInfo info = info0.asClass(RangeInfo.class);
-		int block_num = info3.asInteger();
 		int sort_count = info5.asInteger();
 		int count = info6.asInteger();
 		//System.out.println("count is " +count);
-		if (info2==null){
-			DataList list = (DataList)info1.obj;
-			if (count > sort_count){
-				ods.update("array"+info.range, list, false);
-				return;
-			}
-			Sort.quickSort(list,0,list.table.length-1);
-			if (!info.lastFlag){ 
-				ods.put(info.range+"f", list.createDataList(0, block_num/2) ,false);
-				ods.put(info.range+"b", list.createDataList(block_num/2, block_num/2) ,false);
-				
-				if (info.range==0){
-					//System.out.println("next Even "+info.range+" "+info.range+"f");	
-					new EvenPhase(info0.key,info.range+"f",count,info6.key);
-				} else {
-					//System.out.println("next Even "+info.range+" "+ (info.range-1)+"b"+" "+(info.range)+"f");
-					new EvenPhase(info0.key,(info.range-1)+"b",info.range+"f",count,info6.key);
-				}
-			} else {
-				ods.put(info.range+"f",list, false);
-				ods.put(info.range+"b","dummy");
-				//System.out.println("next Even "+info.range+" "+ (info.range-1)+"b"+" "+(info.range)+"f");
-				new EvenPhase(info0.key,(info.range-1)+"b",info.range+"f",count,info6.key);
-			}
-			
-		} else {
+		
+		int i = info.range;
+		if (count<sort_count){		
 			DataList list1 = (DataList)info1.obj;
 			DataList list2 = (DataList)info2.obj;
 			
-			DataList list3 = new DataList(list1.table.length+list2.table.length);
-			System.arraycopy(list1.table, 0, list3.table, 0, list1.table.length);
-			System.arraycopy(list2.table, 0, list3.table, list1.table.length, list2.table.length);
+			Sort.quickSort(list1,0,list1.table.length-1);
+			Sort.quickSort(list2,0,list2.table.length-1);
+			DataList.merge(list1,list2);
 			
-			if (count > sort_count){
-				ods.update("array"+info.range, list3, false);
-				return;
-			}
+			ods.flip(info1);
+			ods.flip(info2);
 
-			Sort.quickSort(list3,0,list3.table.length-1);
-			ods.put(info.range+"f", list3.createDataList(0, block_num/2) ,false);
-			ods.put(info.range+"b", list3.createDataList(block_num/2, block_num/2) ,false);
-
-			if (info.range==0){
-				//System.out.println("next Even2b "+info.range+" "+ info.range+"f");
-				new EvenPhase(info0.key,info.range+"f",count,info6.key);
-			} else {
-				//System.out.println("next Even2b "+info.range+" "+ (info.range-1)+"b"+" "+info.range+"f");
-				new EvenPhase(info0.key,(info.range-1)+"b",info.range+"f",count,info6.key);
+			
+			
+			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);
+		
+		
 	}
 	
 }