clone list fix, copylist helper
This commit is contained in:
8
core.h
8
core.h
@@ -158,6 +158,8 @@ DefineList(void, Void);
|
||||
#define PushListZero(arena, type, size) (type){ .data=pushSizeFill(arena, ListElementSize(type)*(size), 0), .length=0, .capacity=(size) }
|
||||
#define PushFullList(arena, type, size) (type){ .data=pushSize(arena, ListElementSize(type)*size), .length=(size), .capacity=(size) }
|
||||
#define PushFullListZero(arena, type, size) (type){ .data=pushSizeFill(arena, ListElementSize(type)*(size), 0), .length=(size), .capacity=(size) }
|
||||
void *__listcopyhelper__;
|
||||
#define PushListCopy(arena, type, source) (__listcopyhelper__ = pushSize(arena, ListElementSize(type)*(source).length), memcpy(__listcopyhelper__, (source).data, sizeof((source).data[0])*(source).length), (type){ .data=__listcopyhelper__, .length=(source).length, .capacity=(source).length })
|
||||
|
||||
#define EmptyList() { NULL, 0, 0 }
|
||||
#define __ArrayAsList(array) { .data=(array), .length=ArrayCount(array), .capacity=ArrayCount(array) }
|
||||
@@ -183,13 +185,13 @@ inline VoidList __cloneList(Arena *arena, VoidList list, size_t underlyingSize)
|
||||
.length=list.length,
|
||||
};
|
||||
}
|
||||
#define CloneList(arena, type, list) (type)cloneList((arena), (VoidList)(list), (MemberSizeUnderlying(list)))
|
||||
#define CloneList(arena, type, list) (type)cloneList((arena), (VoidList)(list), (sizeof((list).data[0]))
|
||||
#define ListAppendList(appendee, list)\
|
||||
if ((appendee).capacity - (appendee).length >= list.length) {\
|
||||
memcpy((appendee).data + (appendee).length, (list).data, MemberSizeUnderlying(list)*(list).length);\
|
||||
memcpy((appendee).data + (appendee).length, (list).data, sizeof((list).data[0])*(list).length);\
|
||||
(appendee).length += (list).length;\
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Following two macros do not use pointers due to copying
|
||||
#define ListSlice(list, start, stop) {\
|
||||
|
||||
Reference in New Issue
Block a user