|
@@ -0,0 +1,47 @@
|
|
|
|
|
+#include "toolbox/vptr.h"
|
|
|
|
|
+
|
|
|
|
|
+#include "toolbox/errno.h"
|
|
|
|
|
+#include "toolbox/log.h"
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#define true ((unsigned char) 1L)
|
|
|
|
|
+#define false ((unsigned char) 0L)
|
|
|
|
|
+
|
|
|
|
|
+#define DEREF(PTR, POS) (*(((unsigned char *) (PTR)) + POS))
|
|
|
|
|
+
|
|
|
|
|
+#define TEST_FOR_NULL(POINTER, RET) \
|
|
|
|
|
+ if ( POINTER == NULL ) { \
|
|
|
|
|
+ LOG_ERROR("Null Pointer Not Expected"); \
|
|
|
|
|
+ toolbox_errno = RET_EVN; \
|
|
|
|
|
+ return RET; \
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+_Bool
|
|
|
|
|
+vptr_equal(const struct vptr *restrict p_vptr1
|
|
|
|
|
+ , const struct vptr *restrict p_vptr2) {
|
|
|
|
|
+ toolbox_errno = RET_OK;
|
|
|
|
|
+
|
|
|
|
|
+ TEST_FOR_NULL(p_vptr1, false);
|
|
|
|
|
+ TEST_FOR_NULL(p_vptr2, false);
|
|
|
|
|
+
|
|
|
|
|
+ TEST_FOR_NULL(p_vptr1->data, false);
|
|
|
|
|
+ TEST_FOR_NULL(p_vptr2->data, false);
|
|
|
|
|
+
|
|
|
|
|
+ if ( p_vptr1->size != p_vptr2->size )
|
|
|
|
|
+ return false;
|
|
|
|
|
+
|
|
|
|
|
+ for ( size_t z = 0; z < p_vptr1->size; ++z ) {
|
|
|
|
|
+ if ( DEREF(p_vptr1->data, z) != DEREF(p_vptr2->data, z) )
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#undef TEST_FOR_NULL
|
|
|
|
|
+#undef DEREF
|
|
|
|
|
+
|
|
|
|
|
+#undef false
|
|
|
|
|
+#undef true
|