/**
 * Copyright 2013 The Loon Authors
 *
 * Licensed 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 loon.utils.res.foundation;

import loon.LSystem;
import loon.utils.TArray;
import loon.utils.res.foundation.NSArray;
import loon.utils.res.foundation.NSObject;

public class NSArray extends NSObject {

	TArray<NSObject> _list = null;

	public static NSArray arrayWithObject(NSObject object) {
		return new NSArray(object);
	}

	public static NSArray arrayWithObjects(NSObject... objects) {
		return new NSArray(objects);
	}

	public static NSArray arrayWithArray(NSArray array) {
		return new NSArray(array);
	}

	public NSArray(NSArray array) {
		this._list = this._list.cpy();
	}

	public NSArray() {
		_list = new TArray<NSObject>();
	}

	public NSArray(int length) {
		_list = new TArray<NSObject>(length);
	}

	public NSArray(NSObject... objects) {
		_list = new TArray<NSObject>(objects.length);
		for (NSObject object : objects) {
			_list.add(object);
		}
	}

	public NSArray(NSObject object) {
		_list = new TArray<NSObject>(1);
		_list.add(object);
	}

	public TArray<NSObject> get() {
		return _list;
	}

	public int count() {
		return _list.size;
	}

	public void clear() {
		_list.clear();
	}
	
	public void addObject(NSObject o) {
		_list.add(o);
	}

	public void removeObject(NSObject o) {
		_list.remove(o);
	}

	public void setValue(int key, NSObject value) {
		_list.set(key, value);
	}

	public NSObject objectAtIndex(int index) {
		return (NSObject) _list.get(index);
	}

	public int indexOfObject(NSObject o) {
		return _list.indexOf(o);
	}

	public NSObject lastObject() {
		return (NSObject) _list.last();
	}

	@Override
	protected void addSequence(StringBuilder sbr, String indent) {
		sbr.append(indent);
		sbr.append("<array>");
		sbr.append(LSystem.LS);
		for (int i = 0; i < _list.size; i++) {
			NSObject nso = (NSObject) _list.get(i);
			if (nso != null) {
				nso.addSequence(sbr, indent + "  ");
				sbr.append(LSystem.LS);
			}
		}
		sbr.append(indent);
		sbr.append("</array>");
	}

	public String toString() {
		return _list.toString();
	}
}
