/*
*********************************************************************************************************
*                                                uC/GUI
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              µC/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : GUI_ARRAY.h
Purpose     : Array handling routines
---------------------------END-OF-HEADER------------------------------
*/

#ifndef GUIARRAY_H
#define GUIARRAY_H

#include "WM_Intern.h"

#if GUI_WINSUPPORT

typedef enum {
  GUI_ARRAY_STATE_NOT_CREATED,
  GUI_ARRAY_STATE_CREATED,
  GUI_ARRAY_STATE_DELETED
} GUI_ARRAY_STATE;

typedef struct {
  U16 NumItems;
  WM_HMEM haHandle;   /* Handle to buffer holding handles */
  #if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
    GUI_ARRAY_STATE InitState;
  #endif
} GUI_ARRAY;



int      GUI_ARRAY_AddItem        (GUI_ARRAY* pThis, const void *pNew, int Len);
void     GUI_ARRAY_Delete         (GUI_ARRAY* pThis);
WM_HMEM  GUI_ARRAY_GethItem       (const GUI_ARRAY* pThis, unsigned int Index);
unsigned GUI_ARRAY_GetNumItems    (const GUI_ARRAY* pThis);
void*    GUI_ARRAY_GetpItem       (const GUI_ARRAY* pThis, unsigned int Index);
/* Optional methods */
int      GUI_ARRAY_SethItem       (GUI_ARRAY* pThis, unsigned int Index, WM_HMEM hItem);
WM_HMEM  GUI_ARRAY_SetItem        (GUI_ARRAY* pThis, unsigned int Index, const void* pData, int Len);
void     GUI_ARRAY_DeleteItem     (GUI_ARRAY* pThis, unsigned int Index);
char     GUI_ARRAY_InsertBlankItem(GUI_ARRAY* pThis, unsigned int Index);
WM_HMEM  GUI_ARRAY_InsertItem     (GUI_ARRAY* pThis, unsigned int Index, int Len);
void*    GUI_ARRAY_ResizeItem     (GUI_ARRAY* pThis, unsigned int Index, int Len);

#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
  void GUI_ARRAY_Create (      GUI_ARRAY * pThis);
  void GUI_ARRAY_Check  (const GUI_ARRAY * pThis);
  #define GUI_ARRAY_CREATE(pThis) GUI_ARRAY_Create(pThis)
  #define GUI_ARRAY_CHECK(pThis)  GUI_ARRAY_Check(pThis)
#else
  #define GUI_ARRAY_CREATE(pThis)
  #define GUI_ARRAY_CHECK(pThis)
#endif


#endif

#endif
