blob: e17482d7150686632a8b429a396a9719a2a34b0f [file] [log] [blame] [view] [raw]
---
title: facil.io - FIOBJ Array API
sidebar: 0.6.x/_sidebar.md
---
# {{{title}}}
### Array creation API
#### `fiobj_ary_new`
```c
FIOBJ fiobj_ary_new(void);
```
Creates a mutable empty Array object. Use `fiobj_free` when done.
#### `fiobj_ary_new2`
```c
FIOBJ fiobj_ary_new2(size_t capa);
```
Creates a mutable empty Array object with the requested capacity.
### Accessing Array Members / Data
#### `fiobj_ary_count`
```c
size_t fiobj_ary_count(FIOBJ ary);
```
Returns the number of elements in the Array.
#### `fiobj_ary_capa`
```c
size_t fiobj_ary_capa(FIOBJ ary);
```
Returns the current, temporary, array capacity (it's dynamic).
#### `fiobj_ary2ptr`
```c
FIOBJ *fiobj_ary2ptr(FIOBJ ary);
```
Returns a TEMPORARY pointer to the beginning of the array.
This pointer can be used for sorting and other direct access operations as long as no other actions (insertion/deletion) are performed on the array.
#### `fiobj_ary_index`
```c
FIOBJ fiobj_ary_index(FIOBJ ary, int64_t pos);
```
Returns a temporary object owned by the Array.
Wrap this function call within `fiobj_dup` to get a persistent handle. i.e.:
```c
fiobj_dup(fiobj_ary_index(array, 0));
```
Negative values are retrieved from the end of the array. i.e., `-1` is the last item.
/** */
/**
Sets an object at the requested position.
/
void fiobj_ary_set(FIOBJ ary, FIOBJ obj, int64_t pos);
#### `fiobj_ary_entry`
```c
#define fiobj_ary_entry(a, p) fiobj_ary_index((a), (p))
```
Alias for [`fiobj_ary_index`](#fiobj_ary_index).
### Array push / shift API
#### `fiobj_ary_push`
```c
void fiobj_ary_push(FIOBJ ary, FIOBJ obj);
```
Pushes an object to the end of the Array.
#### `fiobj_ary_pop`
```c
FIOBJ fiobj_ary_pop(FIOBJ ary);
```
Pops an object from the end of the Array.
#### `fiobj_ary_unshift`
```c
void fiobj_ary_unshift(FIOBJ ary, FIOBJ obj);
```
Unshifts an object to the beginning of the Array. This could be expensive.
#### `fiobj_ary_shift`
```c
FIOBJ fiobj_ary_shift(FIOBJ ary);
```
Shifts an object from the beginning of the Array.
# Find / Remove / Replace
#### `fiobj_ary_replace`
```c
FIOBJ fiobj_ary_replace(FIOBJ ary, FIOBJ obj, int64_t pos);
```
Replaces the object at a specific position, returning the old object -
remember to `fiobj_free` the old object.
#### `fiobj_ary_find`
```c
int64_t fiobj_ary_find(FIOBJ ary, FIOBJ data);
```
Finds the index of a specifide object (if any). Returns -1 if the object
isn't found.
#### `fiobj_ary_remove`
```c
int fiobj_ary_remove(FIOBJ ary, int64_t pos);
```
Removes the object at the index (if valid), changing the index of any
following objects.
Returns 0 on success or -1 (if no object or out of bounds).
#### `fiobj_ary_remove2`
```c
int fiobj_ary_remove2(FIOBJ ary, FIOBJ data);
```
Removes the first instance of an object from the Array (if any), changing the
index of any following objects.
Returns 0 on success or -1 (if the object wasn't found).
### Array Compacting
#### `fiobj_ary_compact`
```c
void fiobj_ary_compact(FIOBJ ary);
```
Removes any NULL *pointers* from an Array, keeping all Objects (including
explicit NULL objects) in the array.
This action is O(n) where n in the length of the array.
It could get expensive.