BLI listbase: add bytes finding helpers.
Quite similar to string ones actually, except more generic. Used in id_override_static branch currently.
This commit is contained in:
parent
470b4cb62f
commit
d697e3d46e
@ -50,12 +50,14 @@ void *BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED
|
|||||||
void *BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
void *BLI_findstring_ptr(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_findstring_ptr(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
void *BLI_findptr(const struct ListBase *listbase, const void *ptr, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_findptr(const struct ListBase *listbase, const void *ptr, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
|
void *BLI_listbase_bytes_find(const ListBase *listbase, const void *bytes, const size_t bytes_size, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2);
|
||||||
|
|
||||||
/* find backwards */
|
/* find backwards */
|
||||||
void *BLI_rfindlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_rfindlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
void *BLI_rfindstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_rfindstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
void *BLI_rfindstring_ptr(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_rfindstring_ptr(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
void *BLI_rfindptr(const struct ListBase *listbase, const void *ptr, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
void *BLI_rfindptr(const struct ListBase *listbase, const void *ptr, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
|
||||||
|
void *BLI_listbase_bytes_rfind(const ListBase *listbase, const void *bytes, const size_t bytes_size, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2);
|
||||||
|
|
||||||
void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1);
|
void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1);
|
||||||
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1);
|
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1);
|
||||||
|
@ -691,6 +691,46 @@ void *BLI_rfindptr(const ListBase *listbase, const void *ptr, const int offset)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the first element of listbase which contains the specified bytes
|
||||||
|
* at the specified offset, returning NULL if not found.
|
||||||
|
*/
|
||||||
|
void *BLI_listbase_bytes_find(const ListBase *listbase, const void *bytes, const size_t bytes_size, const int offset)
|
||||||
|
{
|
||||||
|
Link *link = NULL;
|
||||||
|
const void *ptr_iter;
|
||||||
|
|
||||||
|
for (link = listbase->first; link; link = link->next) {
|
||||||
|
ptr_iter = (const void *)(((const char *)link) + offset);
|
||||||
|
|
||||||
|
if (memcmp(bytes, ptr_iter, bytes_size) == 0) {
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* same as above but find reverse */
|
||||||
|
/**
|
||||||
|
* Finds the last element of listbase which contains the specified bytes
|
||||||
|
* at the specified offset, returning NULL if not found.
|
||||||
|
*/
|
||||||
|
void *BLI_listbase_bytes_rfind(const ListBase *listbase, const void *bytes, const size_t bytes_size, const int offset)
|
||||||
|
{
|
||||||
|
Link *link = NULL;
|
||||||
|
const void *ptr_iter;
|
||||||
|
|
||||||
|
for (link = listbase->last; link; link = link->prev) {
|
||||||
|
ptr_iter = (const void *)(((const char *)link) + offset);
|
||||||
|
|
||||||
|
if (memcmp(bytes, ptr_iter, bytes_size) == 0) {
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the 0-based index of the first element of listbase which contains the specified
|
* Returns the 0-based index of the first element of listbase which contains the specified
|
||||||
* null-terminated string at the specified offset, or -1 if not found.
|
* null-terminated string at the specified offset, or -1 if not found.
|
||||||
|
Loading…
Reference in New Issue
Block a user