/* * PROJECT: NyARToolkit * -------------------------------------------------------------------------------- * This work is based on the original ARToolKit developed by * Hirokazu Kato * Mark Billinghurst * HITLab, University of Washington, Seattle * http://www.hitl.washington.edu/artoolkit/ * * 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.artoolkit; import jp.nyatla.nyartoolkit.NyARException; import jp.nyatla.nyartoolkit.core.types.stack.NyARObjectStack; /** * このクラスは、NyARLabelingLabelの動的配列です。 * {@link NyARLabeling_ARToolKit}が使います。 * {@link NyARObjectStack}からの追加機能として、配列要素のソート機能があります。 */ public class NyARLabelingLabelStack extends NyARObjectStack<NyARLabelingLabel> { /** * コンストラクタです。 * @param i_max_array_size * 配列の最大サイズ。 * @throws NyARException */ public NyARLabelingLabelStack(int i_max_array_size) throws NyARException { super(); super.initInstance(i_max_array_size,NyARLabelingLabel.class); } /** {@link NyARLabelingLabel}要素を返します。*/ protected NyARLabelingLabel createElement() { return new NyARLabelingLabel(); } /** * この関数は、配列を{@link NyARLabelingLabel#area}でソートします。 */ final public void sortByArea() { int len=this._length; if(len<1){ return; } int h = len *13/10; NyARLabelingLabel[] item=this._items; for(;;){ int swaps = 0; for (int i = 0; i + h < len; i++) { if (item[i + h].area > item[i].area) { final NyARLabelingLabel 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; } } } }