/*	
 *	clipusar.h
 *
 *	UnityScript Array
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2017 Naoyuki Sawa
 *
 *	* Sat Jan 21 21:05:34 JST 2017 Naoyuki Sawa
 *	- 1st リリース。
 *	- UnityScriptのArrayクラスの仕様を勉強するために、C言語で仕様互換の関数を実装してみました。
 *	  内部処理は、GPtrArrayを利用しています。
 *	  勉強のためだけに作ったもので、実際のアプリケーションで当モジュールを利用する利点は有りません。
 *	  だいたいWebブラウザのJavaScriptのArrayと同じ仕様ですが、関数名の一文字目が大文字だったり、関数が少ない(?)違いが有るみたいです。
 *	  元々、UnityScriptと、WebブラウザのJavaScriptは別物なので、Arrayクラスの仕様も別物と考えて使う方が安全だと思います。
 *	  □参照資料:「Unity DOCUMENTATION - Version: 5.5 (switch to 5.6b) - Scripting API - Array」(https://docs.unity3d.com/ScriptReference/Array.html)
 */
#ifndef __CLIP_USAR_H__
#define __CLIP_USAR_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/****************************************************************************
 *	
 ****************************************************************************/
struct UnityScriptArray;	//opaque datatype
/****************************************************************************
 *	
 ****************************************************************************/
struct UnityScriptArray* UnityScriptArray_New();
void UnityScriptArray_Free(struct UnityScriptArray* pArray);
void* UnityScriptArray_GetAt(struct UnityScriptArray* pArray, int iIndex);
void UnityScriptArray_SetAt(struct UnityScriptArray* pArray, int iIndex, void* pValue);
int UnityScriptArray_GetLength(struct UnityScriptArray* pArray);
void UnityScriptArray_SetLength(struct UnityScriptArray* pArray, int nLength);
void UnityScriptArray_Add(struct UnityScriptArray* pArray, void* pValue);
void UnityScriptArray_RemoveAt(struct UnityScriptArray* pArray, int iIndex);
void UnityScriptArray_Clear(struct UnityScriptArray* pArray);
int UnityScriptArray_Push(struct UnityScriptArray* pArray, void* pValue);
void* UnityScriptArray_Pop(struct UnityScriptArray* pArray);
void* UnityScriptArray_Shift(struct UnityScriptArray* pArray);
int UnityScriptArray_Unshift(struct UnityScriptArray* pArray, void* pValue);
struct UnityScriptArray* UnityScriptArray_Sort(struct UnityScriptArray* pArray);
struct UnityScriptArray* UnityScriptArray_Concat(struct UnityScriptArray* pArray/*NULL可*/, ... /*,NULL*/);
char* UnityScriptArray_Join(struct UnityScriptArray* pArray, const char* pSeperator);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_USAR_H__
