39 lines
1.0 KiB
C
39 lines
1.0 KiB
C
#ifndef INCLUDED_C_QUICKFINDUF_H
|
|||
|
|
#define INCLUDED_C_QUICKFINDUF_H
|
||
|
|
|
||
|
|
#ifndef INCLUDED_C_BASE_H
|
||
|
|
#include <c_Base.h>
|
||
|
|
#endif /*INCLUDED_C_BASE_H*/
|
||
|
|
|
||
|
|
|
||
|
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
||
|
|
/* */
|
||
|
|
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
c_size_t* id;
|
||
|
|
c_size_t id_len;
|
||
|
|
c_size_t count;
|
||
|
|
}c_QuickFindUF_t;
|
||
|
|
|
||
|
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
||
|
|
/* */
|
||
|
|
|
||
|
|
c_err_t c_QuickFindUF_Init(c_QuickFindUF_t* self, c_size_t count);
|
||
|
|
|
||
|
|
void c_QuickFindUF_Destroy(c_QuickFindUF_t* self);
|
||
|
|
|
||
|
|
c_size_t c_QuickFindUF_Find(c_QuickFindUF_t* self, c_size_t index);
|
||
|
|
|
||
|
|
c_err_t c_QuickFindUF_Union(c_QuickFindUF_t* self, c_size_t p, c_size_t q);
|
||
|
|
|
||
|
|
C_STATIC_FORCE_INLINE
|
||
|
|
c_bool_t c_QuickFindUF_IsConnected(c_QuickFindUF_t* self, c_size_t p, c_size_t q) {
|
||
|
|
if (!self || !self->id || p>=self->id_len || q>=self->id_len) return C_FALSE;
|
||
|
|
return self->id[q] == self->id[p];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#endif /*INCLUDED_C_QUICKFINDUF_H*/
|