|  | /* | 
|  | * Copyright (C) 2016 Google Inc. | 
|  | * Dan Cross <crossd@gmail.com> | 
|  | * See LICENSE for license details. | 
|  | */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | /* | 
|  | * A tracking structure for growing lists of pointers. | 
|  | */ | 
|  | struct slice { | 
|  | void **ptrs; | 
|  | size_t len; | 
|  | size_t capacity; | 
|  | }; | 
|  |  | 
|  | void slice_init(struct slice *slice); | 
|  | void slice_clear(struct slice *slice); | 
|  | void *slice_get(struct slice *slice, size_t i); | 
|  | bool slice_put(struct slice *slice, size_t i, void *p); | 
|  | bool slice_del(struct slice *slice, size_t i); | 
|  | void slice_append(struct slice *s, void *p); | 
|  | size_t slice_len(struct slice *slice); | 
|  | void **slice_finalize(struct slice *slice); | 
|  | void slice_destroy(struct slice *slice); |