Fix memory errors detected by valgrind and inline functions
[satune.git] / src / Collections / vector.h
index f3b45f8c4c7ffe52b2158864c42d4d2ba9a111df..76da3873dcc633ca553926c9b1bd36725e88f238 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() {                           \
                return allocVector ## name(defcap);                                 \
        }                                                                     \
        Vector ## name * allocVector ## name(uint capacity) {                 \
-               Vector ## name * tmp = (Vector ## name *)ourmalloc(sizeof(type));  \
+               Vector ## name * tmp = (Vector ## name *)ourmalloc(sizeof(Vector ## name));  \
                tmp->size = 0;                                                      \
                tmp->capacity = capacity;                                           \
                tmp->array = (type *) ourcalloc(1, sizeof(type) * capacity);          \
@@ -34,7 +37,8 @@
        }                                                                     \
        Vector ## name * allocVectorArray ## name(uint capacity, type * array)  { \
                Vector ## name * tmp = allocVector ## name(capacity);               \
-               memcpy(tmp->array, array, capacity * sizeof(type));                 \
+               tmp->size=capacity;                                                                                                                                                                                                     \
+               memcpy(tmp->array, array, capacity * sizeof(type));                                                                     \
                return tmp;                                                         \
        }                                                                     \
        void pushVector ## name(Vector ## name *vector, type item) {          \
        }                                                                                                                                                                                                                                                                                       \
        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);                                                                                                     \
+               vector->size=capacity;                                                                                                                                                                                  \
+               memcpy(vector->array, array, capacity * sizeof(type));  \
        }
 #endif