On Wed, Apr 22, 2015 at 6:06 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote: > On Wed, Apr 22, 2015 at 3:03 PM, Connor Abbott <cwabbo...@gmail.com> wrote: >> I think it would be better to call this "nir_vector" rather than >> "nir_array," since this is essentially a poor man's version of >> std::vector<>. Is this ok with you? > > I battled over that one for quite a while. In the end, I settled on > nir_array because NIR is a compiler IR for vector architectures and I > was concerned that a datatype called nir_vector that was not, in fact, > a vector in the mathematical sense would be troublesome. > --Jason
Ugh, you're right... I guess nir_array would lead to less confusion, even if it's not quite the name that everyone else uses. > >> On Fri, Apr 10, 2015 at 8:48 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote: >>> --- >>> src/glsl/nir/nir_array.h | 96 >>> ++++++++++++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 96 insertions(+) >>> create mode 100644 src/glsl/nir/nir_array.h >>> >>> diff --git a/src/glsl/nir/nir_array.h b/src/glsl/nir/nir_array.h >>> new file mode 100644 >>> index 0000000..1db4e8c >>> --- /dev/null >>> +++ b/src/glsl/nir/nir_array.h >>> @@ -0,0 +1,96 @@ >>> +/* >>> + * Copyright © 2015 Intel Corporation >>> + * >>> + * Permission is hereby granted, free of charge, to any person obtaining a >>> + * copy of this software and associated documentation files (the >>> "Software"), >>> + * to deal in the Software without restriction, including without >>> limitation >>> + * the rights to use, copy, modify, merge, publish, distribute, sublicense, >>> + * and/or sell copies of the Software, and to permit persons to whom the >>> + * Software is furnished to do so, subject to the following conditions: >>> + * >>> + * The above copyright notice and this permission notice (including the >>> next >>> + * paragraph) shall be included in all copies or substantial portions of >>> the >>> + * Software. >>> + * >>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS >>> OR >>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, >>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL >>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR >>> OTHER >>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING >>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >>> DEALINGS >>> + * IN THE SOFTWARE. >>> + * >>> + * Authors: >>> + * Jason Ekstrand (ja...@jlekstrand.net) >>> + * >>> + */ >>> + >>> +#pragma once >>> + >>> +#ifdef __cplusplus >>> +extern "C" { >>> +#endif >>> + >>> +typedef struct { >>> + void *mem_ctx; >>> + size_t size; >>> + size_t alloc; >>> + void *data; >>> +} nir_array; >>> + >>> +static inline void >>> +nir_array_init(nir_array *arr, void *mem_ctx) >>> +{ >>> + arr->mem_ctx = mem_ctx; >>> + arr->size = 0; >>> + arr->alloc = 0; >>> + arr->data = NULL; >>> +} >>> + >>> +static inline void >>> +nir_array_fini(nir_array *arr) >>> +{ >>> + if (arr->mem_ctx) >>> + ralloc_free(arr->data); >>> + else >>> + free(arr->data); >>> +} >>> + >>> +#define NIR_ARRAY_INITIAL_SIZE 64 >>> + >>> +/* Increments the size of the array by the given ammount and returns a >>> + * pointer to the beginning of the newly added space. >>> + */ >>> +static inline void * >>> +nir_array_grow(nir_array *arr, size_t additional) >>> +{ >>> + size_t new_size = arr->size + additional; >>> + if (new_size > arr->alloc) { >>> + if (arr->alloc == 0) >>> + arr->alloc = NIR_ARRAY_INITIAL_SIZE; >>> + >>> + while (new_size > arr->alloc) >>> + arr->alloc *= 2; >>> + >>> + if (arr->mem_ctx) >>> + arr->data = reralloc_size(arr->mem_ctx, arr->data, arr->alloc); >>> + else >>> + arr->data = realloc(arr->data, arr->alloc); >>> + } >>> + >>> + void *ptr = (void *)((char *)arr->data + arr->size); >>> + arr->size = new_size; >>> + >>> + return ptr; >>> +} >>> + >>> +#define nir_array_add(arr, type, elem) \ >>> + *(type *)nir_array_grow(arr, sizeof(type)) = (elem) >>> + >>> +#define nir_array_foreach(arr, type, elem) \ >>> + for (type *elem = (type *)(arr)->data; \ >>> + elem < (type *)((char *)(arr)->data + (arr)->size); elem++) >>> + >>> +#ifdef __cplusplus >>> +} /* extern "C" */ >>> +#endif >>> -- >>> 2.3.5 >>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev