Function voluntary_servitude::ffi::vs_iter_len
source · Expand description
Returns total size of iterator, it may grow, but never decrease
Length won’t increase after iterator is emptied (self.next() == None)
Returns 0 if pointer to VSIter
is NULL
Warning: UB if pointer to VSIter
is invalid
Rust
use std::ptr::null_mut;
use voluntary_servitude::ffi::*;
unsafe {
let vs = vs_new();
let data: i32 = 5;
let iter = vs_iter(vs);
assert_eq!(vs_len(vs), 0);
assert_eq!(vs_append(vs, &data as *const i32 as *const c_void), 0);
assert_eq!(vs_iter_destroy(iter), 0);
let iter = vs_iter(vs);
assert_eq!(vs_len(vs), 1);
assert_eq!(vs_iter_len(iter), 1);
assert_eq!(vs_append(vs, &data as *const i32 as *const c_void), 0);
assert_eq!(vs_append(vs, &data as *const i32 as *const c_void), 0);
assert_eq!(vs_append(vs, &data as *const i32 as *const c_void), 0);
assert_eq!(vs_len(vs), 4);
assert_eq!(vs_iter_len(iter), 4);
assert_eq!(vs_clear(vs), 0);
assert_eq!(vs_iter_len(iter), 4);
assert_eq!(vs_iter_destroy(iter), 0);
let iter = vs_iter(vs);
assert_eq!(vs_iter_len(iter), 0);
assert_eq!(vs_iter_destroy(iter), 0);
assert_eq!(vs_destroy(vs), 0);
// 0 length on NULL pointer
assert_eq!(vs_iter_len(null_mut()), 0);
}
C
#include<assert.h>
#include "../include/voluntary_servitude.h"
int main(int argc, char **argv) {
vs_t * vs = vs_new();
const unsigned int data = 5;
assert_eq!(vs_append(vs, &data as *const i32 as *const c_void), 0);
assert(vs_len(vs) == 1);
vs_iter_t * iter = vs_iter(vs);
assert(vs_iter_len(iter) == 1);
const unsigned int data = 5;
assert(vs_append(vs, (void *) &data) == 0);
assert(vs_append(vs, (void *) &data) == 0);
assert(vs_append(vs, (void *) &data) == 0);
assert(vs_len(vs) == 4);
assert(vs_iter_len(iter) == 4);
assert(vs_clear() == 0);
assert(vs_iter_len(iter) == 4);
assert(vs_iter_destroy(iter) == 0);
vs_iter_t * iter2 = vs_iter(vs);
assert(vs_iter_len(iter2) == 0);
assert(vs_iter_destroy(iter2) == 0);
assert(vs_destroy(vs) == 0);
// 0 length on NULL pointer
assert(vs_iter_len(NULL) == 0);
return 0;
}