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 > 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