/* * PROJECT: NyARToolkit(Extension) * -------------------------------------------------------------------------------- * The NyARToolkit is Java edition ARToolKit class library. * Copyright (C)2008-2009 Ryo Iizuka * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * For further information please contact. * http://nyatla.jp/nyatoolkit/ * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp> * */ package jp.nyatla.nyartoolkit.core.labeling.rlelabeling; import jp.nyatla.nyartoolkit.NyARException; import jp.nyatla.nyartoolkit.core.labeling.artoolkit.NyARLabelingLabel; import jp.nyatla.nyartoolkit.core.labeling.artoolkit.NyARLabeling_ARToolKit; import jp.nyatla.nyartoolkit.core.types.stack.NyARObjectStack; import jp.nyatla.nyartoolkit.core.types.stack.NyARPointerStack; /** * このクラスは、{@link NyARRleLabelFragmentInfo}の参照値の動的配列です。 * {@link NyARLabeling_Rle}が使います。 * {@link NyARPointerStack}からの追加機能として、配列要素のソート機能があります。 */ public class NyARRleLabelFragmentInfoPtrStack extends NyARPointerStack<NyARRleLabelFragmentInfo> { public NyARRleLabelFragmentInfoPtrStack(int i_length) throws NyARException { this.initInstance(i_length, NyARRleLabelFragmentInfo.class); return; } /** * この関数は、配列を{@link NyARLabelingLabel#area}でソートします。 */ final public void sortByArea() { int len=this._length; if(len<1){ return; } int h = len *13/10; NyARRleLabelFragmentInfo[] item=this._items; for(;;){ int swaps = 0; for (int i = 0; i + h < len; i++) { if (item[i + h].area > item[i].area) { final NyARRleLabelFragmentInfo temp = item[i + h]; item[i + h] = item[i]; item[i] = temp; swaps++; } } if (h == 1) { if (swaps == 0){ break; } }else{ h=h*10/13; } } } }