blob: 098dcfbccf5cbb4898eea3119b314c334d763fb1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.mnemonic.bench;
import org.apache.mnemonic.DurableType;
import org.apache.mnemonic.EntityFactoryProxy;
import org.apache.mnemonic.Utils;
import org.apache.mnemonic.VolatileMemAllocator;
import org.apache.mnemonic.service.memory.internal.SysVMemServiceImpl;
import org.apache.mnemonic.collections.DurableSinglyLinkedList;
import org.apache.mnemonic.collections.DurableSinglyLinkedListFactory;
import org.apache.mnemonic.collections.SinglyLinkedNode;
import org.apache.mnemonic.collections.SinglyLinkedNodeFactory;
import org.apache.mnemonic.service.computing.GeneralComputingService;
import org.apache.mnemonic.service.computing.ValueInfo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class DNCSTextFileSort implements TextFileSort {
private String uri = "";
private VolatileMemAllocator m_act = null;
private DurableType[] elem_gftypes = {DurableType.LONG};
private EntityFactoryProxy[] elem_efproxies = null;
private Long head;
private long[] sortinfo = new long[3];
private long[][] ostack;
public DNCSTextFileSort() {
}
@Override
public void load(BufferedReader reader) throws NumberFormatException, IOException {
if (null != m_act) {
clear();
}
m_act = new VolatileMemAllocator(new SysVMemServiceImpl(), 1024 * 1024 * 1024 * 5,
uri);
String text = null;
SinglyLinkedNode<Long> curnode = null, prvnode = null, node = null;
Long val;
while ((text = reader.readLine()) != null) {
val = Long.parseLong(text);
curnode = SinglyLinkedNodeFactory.create(m_act, elem_efproxies, elem_gftypes, false);
curnode.setItem(val, false);
if (null == prvnode) {
this.head = curnode.getHandler();
this.ostack = curnode.getNativeFieldInfo();
} else {
prvnode.setNext(curnode, false);
}
prvnode = curnode;
}
}
@Override
public void doSort() {
GeneralComputingService gcsvr = Utils.getGeneralComputingService("sort");
ValueInfo vinfo = new ValueInfo();
List<long[][]> objstack = new ArrayList<long[][]>();
objstack.add(this.ostack);
long[][] fidinfostack = {{2L, 1L}};
vinfo.handler = this.head;
vinfo.transtable = m_act.getTranslateTable();
vinfo.dtype = DurableType.LONG;
vinfo.frames = Utils.genNativeParamForm(objstack, fidinfostack);
ValueInfo[] vinfos = {vinfo};
long[] ret = gcsvr.perform("1dlong_bubble", vinfos);
this.head = ret[0];
this.sortinfo[0] = ret[1];
this.sortinfo[1] = ret[2];
this.sortinfo[2] = ret[3];
}
@Override
public void store(BufferedWriter writer) throws IOException {
DurableSinglyLinkedList<Long> linkvals = DurableSinglyLinkedListFactory.restore(m_act,
elem_efproxies, elem_gftypes, this.head, false);
Iterator<Long> elemiter = linkvals.iterator();
Long val;
while (elemiter.hasNext()) {
val = elemiter.next();
writer.write(val.toString());
writer.newLine();
}
}
@Override
public long[] getSortInfo() {
return this.sortinfo;
}
@Override
public void clear() {
m_act.close();
}
}