13
#include "index_priv.h"
15
int index_try_lock(struct indexator *ind, size_t idx) {
18
if ((err = ind_check(ind, idx))) {
22
if (ind_get_bit(ind, idx)) {
31
void index_lock(struct indexator *ind, size_t idx) {
32
ind_set_bit(ind, idx);
35
assert(idx != INDEX_NONE);
37
if ((idx >= ind->clamp_min) && (idx <= ind->clamp_max)) {
40
if (idx == ind->min) {
41
ind->min = ind_find_more(ind, ind->min, ind->clamp_max, INDEX_NONE);
43
if (idx == ind->max) {
44
ind->max = ind_find_less(ind, ind->max, ind->clamp_min, INDEX_NONE);
46
ind->prev = ind_find_less(ind, idx, ind->clamp_min, ind->max);
47
ind->next = ind_find_more(ind, idx, ind->clamp_max, ind->min);
51
int index_locked(struct indexator *ind, size_t idx) {
54
if ((err = ind_check(ind, idx))) {
58
return ind_get_bit(ind, idx);
61
void index_unlock(struct indexator *ind, size_t idx) {
62
if (ind_check(ind, idx)) {
66
ind_unset_bit(ind, idx);
69
assert(idx != INDEX_NONE);
71
if ((idx >= ind->clamp_min) && (idx <= ind->clamp_max)) {
72
assert(ind->last != INDEX_NONE);
74
if (ind->min == INDEX_NONE) {
75
ind->min = ind->max = ind->prev = ind->next = idx;
84
if (((idx > ind->prev) && (idx < ind->last))
85
|| ((ind->prev > ind->last)
86
&& ((idx > ind->prev) || (idx < ind->last)))
87
|| (ind->prev == ind->last)) {
90
if (((idx < ind->next) && (idx > ind->last))
91
|| ((ind->next < ind->last)
92
&& ((idx < ind->next) || (idx > ind->last)))
93
|| (ind->next == ind->last)) {