Index: src/cfwarray.c ================================================================== --- src/cfwarray.c +++ src/cfwarray.c @@ -23,10 +23,11 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include +#include #include "cfwobject.h" #include "cfwarray.h" struct CFWArray { @@ -200,10 +201,58 @@ array->data = new; array->size--; return true; } + +bool +cfw_array_contains(CFWArray *array, void *ptr) +{ + size_t i; + + for (i = 0; i < array->size; i++) + if (cfw_equal(array->data[i], ptr)) + return true; + + return false; +} + +bool +cfw_array_contains_ptr(CFWArray *array, void *ptr) +{ + size_t i; + + for (i = 0; i < array->size; i++) + if (array->data[i] == ptr) + return true; + + return false; +} + +size_t +cfw_array_find(CFWArray *array, void *ptr) +{ + size_t i; + + for (i = 0; i < array->size; i++) + if (cfw_equal(array->data[i], ptr)) + return i; + + return SIZE_MAX; +} + +size_t +cfw_array_find_ptr(CFWArray *array, void *ptr) +{ + size_t i; + + for (i = 0; i < array->size; i++) + if (array->data[i] == ptr) + return i; + + return SIZE_MAX; +} static CFWClass class = { .name = "CFWArray", .size = sizeof(CFWArray), .ctor = ctor, Index: src/cfwarray.h ================================================================== --- src/cfwarray.h +++ src/cfwarray.h @@ -35,7 +35,11 @@ extern void* cfw_array_get(CFWArray*, size_t); extern bool cfw_array_set(CFWArray*, size_t, void*); extern bool cfw_array_push(CFWArray*, void*); extern void* cfw_array_last(CFWArray*); extern bool cfw_array_pop(CFWArray*); +extern bool cfw_array_contains(CFWArray*, void*); +extern bool cfw_array_contains_ptr(CFWArray*, void*); +extern size_t cfw_array_find(CFWArray*, void*); +extern size_t cfw_array_find_ptr(CFWArray*, void*); #endif