Mercurial > hg > Database > Alice
view src/main/java/alice/test/codesegment/local/bitonicsort/SortPhase.java @ 345:8f71c3e6f11d
Change directory structure Maven standard
author | sugi |
---|---|
date | Wed, 16 Apr 2014 18:26:07 +0900 |
parents | |
children | aefbe41fcf12 |
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 SortPhase extends CodeSegment{ private Receiver info0 = ids.create(CommandType.PEEK); // range private Receiver info1 = ids.create(CommandType.TAKE); // Array1 private Receiver info2 = ids.create(CommandType.TAKE); // Array2 private Receiver info3 = ids.create(CommandType.PEEK); // sort_count private Receiver info4 = ids.create(CommandType.TAKE); // count public SortPhase(String key0, String key1, String key2, int index, String key4){ info0.setKey(key0); info1.setKey(key1,index); info2.setKey(key2,index); info3.setKey("sort_count"); info4.setKey(key4); } @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 = info3.asInteger(); int count = info4.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); // first block index is less than others. So put data twice. } else if (count%2==0&&info.lastFlag){ ods.flip(info2); // Same reason } ods.flip(info1); ods.flip(info2); if (count%2==0&&info.lastFlag&&count+2<sort_count/2){ new SortPhase(info0.key, info1.key, info2.key,count+2,info4.key); ods.update(info4.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 SortPhase(info0.key, f, b, count+1, info4.key); ods.update(info4.key, count+1); } } }