Make vectors work well inline
authorbdemsky <bdemsky@uci.edu>
Tue, 20 Jun 2017 21:19:01 +0000 (14:19 -0700)
committerbdemsky <bdemsky@uci.edu>
Tue, 20 Jun 2017 21:19:01 +0000 (14:19 -0700)
src/Collections/vector.h

index f3b45f8c4c7ffe52b2158864c42d4d2ba9a111df..fa1764e07a0405409c29359eb56310bf22754992 100644 (file)
        void deleteVector ## name(Vector ## name *vector);                    \
        void clearVector ## name(Vector ## name *vector);                     \
        void deleteVectorArray ## name(Vector ## name *vector);                                                         \
-       type * exposeArray ## name(Vector ## name * vector);
+       type * exposeArray ## name(Vector ## name * vector);                                                                    \
+       void allocInlineVector ## name(Vector ## name * vector, uint capacity); \
+       void allocInlineDefVector ## name(Vector ## name * vector);                                             \
+       void allocInlineVectorArray ## name(Vector ## name * vector, uint capacity, type * array);
 
 #define VectorImpl(name, type, defcap)                                  \
        Vector ## name * allocDefVector ## name() {                           \
        }                                                                                                                                                                                                                                                                                       \
        void deleteVectorArray ## name(Vector ## name *vector) {                                                        \
                ourfree(vector->array);                                             \
+       }                                                                                                                                                                                                                                                                                       \
+       void allocInlineVector ## name(Vector ## name * vector, uint capacity) { \
+               vector->size = 0;                                                      \
+               vector->capacity = capacity;                                                                                                                                                                                    \
+               vector->array = (type *) ourcalloc(1, sizeof(type) * capacity);                 \
+       }                                                                                                                                                                                                                                                                                       \
+       void allocInlineDefVector ## name(Vector ## name * vector) {                                    \
+               allocInlineVector ## name(vector, defcap);                                                                                                      \
+       }                                                                                                                                                                                                                                                                                       \
+       void allocInlineVectorArray ## name(Vector ## name * vector, uint capacity, type * array) {     \
+               allocInlineVector ##name(vector, capacity);                                                                                                     \
+               memcpy(vector->array, array, capacity * sizeof(type));                                                  \
        }
 #endif