eglarray.h revision 3464ebd5
13464ebd5Sriastradh/**************************************************************************
23464ebd5Sriastradh *
33464ebd5Sriastradh * Copyright 2010 LunarG, Inc.
43464ebd5Sriastradh * All Rights Reserved.
53464ebd5Sriastradh *
63464ebd5Sriastradh * Permission is hereby granted, free of charge, to any person obtaining a
73464ebd5Sriastradh * copy of this software and associated documentation files (the
83464ebd5Sriastradh * "Software"), to deal in the Software without restriction, including
93464ebd5Sriastradh * without limitation the rights to use, copy, modify, merge, publish,
103464ebd5Sriastradh * distribute, sub license, and/or sell copies of the Software, and to
113464ebd5Sriastradh * permit persons to whom the Software is furnished to do so, subject to
123464ebd5Sriastradh * the following conditions:
133464ebd5Sriastradh *
143464ebd5Sriastradh * The above copyright notice and this permission notice (including the
153464ebd5Sriastradh * next paragraph) shall be included in all copies or substantial portions
163464ebd5Sriastradh * of the Software.
173464ebd5Sriastradh *
183464ebd5Sriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
193464ebd5Sriastradh * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
203464ebd5Sriastradh * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
213464ebd5Sriastradh * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
223464ebd5Sriastradh * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
233464ebd5Sriastradh * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
243464ebd5Sriastradh * DEALINGS IN THE SOFTWARE.
253464ebd5Sriastradh *
263464ebd5Sriastradh **************************************************************************/
273464ebd5Sriastradh
283464ebd5Sriastradh
293464ebd5Sriastradh#ifndef EGLARRAY_INCLUDED
303464ebd5Sriastradh#define EGLARRAY_INCLUDED
313464ebd5Sriastradh
323464ebd5Sriastradh
333464ebd5Sriastradh#include "egltypedefs.h"
343464ebd5Sriastradh
353464ebd5Sriastradh
363464ebd5Sriastradhtypedef EGLBoolean (*_EGLArrayForEach)(void *elem, void *foreach_data);
373464ebd5Sriastradh
383464ebd5Sriastradh
393464ebd5Sriastradhstruct _egl_array {
403464ebd5Sriastradh   const char *Name;
413464ebd5Sriastradh   EGLint MaxSize;
423464ebd5Sriastradh
433464ebd5Sriastradh   void **Elements;
443464ebd5Sriastradh   EGLint Size;
453464ebd5Sriastradh};
463464ebd5Sriastradh
473464ebd5Sriastradh
483464ebd5Sriastradhextern _EGLArray *
493464ebd5Sriastradh_eglCreateArray(const char *name, EGLint init_size);
503464ebd5Sriastradh
513464ebd5Sriastradh
523464ebd5SriastradhPUBLIC void
533464ebd5Sriastradh_eglDestroyArray(_EGLArray *array, void (*free_cb)(void *));
543464ebd5Sriastradh
553464ebd5Sriastradh
563464ebd5Sriastradhextern void
573464ebd5Sriastradh_eglAppendArray(_EGLArray *array, void *elem);
583464ebd5Sriastradh
593464ebd5Sriastradh
603464ebd5Sriastradhextern void
613464ebd5Sriastradh_eglEraseArray(_EGLArray *array, EGLint i, void (*free_cb)(void *));
623464ebd5Sriastradh
633464ebd5Sriastradh
643464ebd5Sriastradhvoid *
653464ebd5Sriastradh_eglFindArray(_EGLArray *array, void *elem);
663464ebd5Sriastradh
673464ebd5Sriastradh
683464ebd5SriastradhPUBLIC EGLint
693464ebd5Sriastradh_eglFilterArray(_EGLArray *array, void **data, EGLint size,
703464ebd5Sriastradh                _EGLArrayForEach filter, void *filter_data);
713464ebd5Sriastradh
723464ebd5Sriastradh
733464ebd5SriastradhEGLint
743464ebd5Sriastradh_eglFlattenArray(_EGLArray *array, void *buffer, EGLint elem_size, EGLint size,
753464ebd5Sriastradh                 _EGLArrayForEach flatten);
763464ebd5Sriastradh
773464ebd5Sriastradh
783464ebd5Sriastradhstatic INLINE EGLint
793464ebd5Sriastradh_eglGetArraySize(_EGLArray *array)
803464ebd5Sriastradh{
813464ebd5Sriastradh   return (array) ? array->Size : 0;
823464ebd5Sriastradh}
833464ebd5Sriastradh
843464ebd5Sriastradh
853464ebd5Sriastradh#endif /* EGLARRAY_INCLUDED */
86