diff options
Diffstat (limited to 'fitz')
-rw-r--r-- | fitz/fitz.h | 1 | ||||
-rw-r--r-- | fitz/obj_array.c | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/fitz/fitz.h b/fitz/fitz.h index a2803899..99751b3e 100644 --- a/fitz/fitz.h +++ b/fitz/fitz.h @@ -424,6 +424,7 @@ int fz_arraylen(fz_obj *array); fz_obj *fz_arrayget(fz_obj *array, int i); void fz_arrayput(fz_obj *array, int i, fz_obj *obj); void fz_arraypush(fz_obj *array, fz_obj *obj); +void fz_arrayinsert(fz_obj *array, fz_obj *obj); int fz_dictlen(fz_obj *dict); fz_obj *fz_dictgetkey(fz_obj *dict, int idx); diff --git a/fitz/obj_array.c b/fitz/obj_array.c index d7d2d2e7..75f4a6b5 100644 --- a/fitz/obj_array.c +++ b/fitz/obj_array.c @@ -104,6 +104,29 @@ fz_arraypush(fz_obj *obj, fz_obj *item) } void +fz_arrayinsert(fz_obj *obj, fz_obj *item) +{ + obj = fz_resolveindirect(obj); + + if (!fz_isarray(obj)) + fz_warn("assert: not an array (%s)", fz_objkindstr(obj)); + else + { + if (obj->u.a.len + 1 > obj->u.a.cap) + { + int i; + obj->u.a.cap = (obj->u.a.cap * 3) / 2; + obj->u.a.items = fz_realloc(obj->u.a.items, sizeof (fz_obj*) * obj->u.a.cap); + for (i = obj->u.a.len ; i < obj->u.a.cap; i++) + obj->u.a.items[i] = nil; + } + memmove(obj->u.a.items + 1, obj->u.a.items, obj->u.a.len * sizeof(fz_obj*)); + obj->u.a.items[0] = fz_keepobj(item); + obj->u.a.len++; + } +} + +void fz_freearray(fz_obj *obj) { int i; |