mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-01 23:36:00 +00:00
93 lines
1.9 KiB
Markdown
93 lines
1.9 KiB
Markdown
|
# vc_vector
|
||
|
Fast simple C vector implementation
|
||
|
|
||
|
[![Build Status: make && make test](https://travis-ci.org/skogorev/vc_vector.svg)](https://travis-ci.org/skogorev/vc_vector)
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
### Basic
|
||
|
```c
|
||
|
#include "vc_vector.h"
|
||
|
|
||
|
int main() {
|
||
|
// Creates an empty vector with the default reserved size
|
||
|
// and without custom deleter. Vector will contain 'int'
|
||
|
vc_vector* v = vc_vector_create(0, sizeof(int), NULL);
|
||
|
if (!v) {
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
const int count = 10;
|
||
|
for (int i = 0; i < count; ++i) {
|
||
|
// The function takes a pointer to the elements,
|
||
|
// but the vector will make a copy of the element
|
||
|
vc_vector_push_back(v, &i);
|
||
|
}
|
||
|
|
||
|
// Print each vector element
|
||
|
for (void* i = vc_vector_begin(v);
|
||
|
i != vc_vector_end(v);
|
||
|
i = vc_vector_next(v, i)) {
|
||
|
printf("%u; ", *(int*)i);
|
||
|
}
|
||
|
|
||
|
vc_vector_release(v);
|
||
|
return 0;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Advanced
|
||
|
```c
|
||
|
#include "vc_vector.h"
|
||
|
|
||
|
struct Item {
|
||
|
int val1;
|
||
|
int val2;
|
||
|
};
|
||
|
|
||
|
int main() {
|
||
|
const int n = 10;
|
||
|
|
||
|
// Creates an empty vector with the reserved size for the 'n' elements
|
||
|
// and with custom deleter 'free'. Vector will contain pointers to 'Item'
|
||
|
vc_vector* v = vc_vector_create(n, sizeof(struct Node*), free);
|
||
|
if (!v) {
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
struct Item* item = NULL;
|
||
|
const int count = n + 1;
|
||
|
// Vector automatically increases the reserved size when 'n + 1' will be added
|
||
|
for (int i = 0; i < count; ++i) {
|
||
|
// Creating item
|
||
|
item = malloc(sizeof(struct Item));
|
||
|
if (!item) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
item->val1 = i;
|
||
|
item->val2 = 0;
|
||
|
|
||
|
// Pushing to the end of the vector
|
||
|
if (!vc_vector_push_back(v, item)) {
|
||
|
// If the item was not pushed, you have to delete it
|
||
|
free(item);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ...
|
||
|
|
||
|
// Calls custom deleter 'free' for all items
|
||
|
// and releases the vector
|
||
|
vc_vector_release(v);
|
||
|
return 0;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Projects that use vc_vector
|
||
|
[kraken.io](https://kraken.io/)
|
||
|
|
||
|
## License
|
||
|
|
||
|
[MIT License](LICENSE.md)
|