summaryrefslogtreecommitdiff
blob: e79180501e2b0bf3458a8b1e8b7347675981e983 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef _JH_CORE_INDEX_H_
#define _JH_CORE_INDEX_H_

#include "index_types.h"

#if JH_INDEX_MAX >= SIZE_MAX
#define JH_index_cannot_allocate_more(type_size, counter) \
      (\
         (((size_t) (counter)) == SIZE_MAX) \
         || ((counter) == JH_INDEX_MAX) \
         || ((((size_t) (counter)) + 1) > (SIZE_MAX / (type_size))) \
      )
#else
#define JH_index_cannot_allocate_more(type_size, counter) \
      (\
         ((counter) == JH_INDEX_MAX) \
         || ((((size_t) (counter)) + 1) > (SIZE_MAX / (type_size))) \
      )
#endif

/*
 * Returns a random JH_index.
 */
/*@
   ensures (\result <= JH_INDEX_MAX);
   assigns \result;
@*/
JH_index JH_index_random (void);

/*
 * Returns a random JH_index, included in [0, limit]
 */
/*@
   ensures (\result <= limit);
   assigns \result;
@*/
JH_index JH_index_random_up_to (const JH_index limit);

int JH_index_cmp (const JH_index a, const JH_index b);

#endif