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