/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.generate.opencl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.trifort.rootbeer.generate.opencl.fields.OpenCLField;
public class FieldPackingSorter {
public List<OpenCLField> sort(List<OpenCLField> input) {
SortableField[] fields = new SortableField[input.size()];
for(int i = 0; i < input.size(); ++i){
fields[i] = new SortableField(input.get(i));
}
Arrays.sort(fields);
List<OpenCLField> ret = new ArrayList<OpenCLField>();
for(int i = 0; i < fields.length; ++i){
ret.add(fields[i].getField());
}
return ret;
}
private class SortableField implements Comparable<SortableField> {
private OpenCLField m_Field;
public SortableField(OpenCLField field){
m_Field = field;
}
public int compareTo(SortableField o) {
Integer this_size = m_Field.getSize();
Integer other_size = o.m_Field.getSize();
//sorting from highest to lowest
int ret = other_size.compareTo(this_size);
if(ret == 0){
return m_Field.getName().compareTo(o.m_Field.getName());
} else {
return ret;
}
}
public OpenCLField getField(){
return m_Field;
}
}
}