1 /*
2 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
3 * University Research and Technology
4 * Corporation. All rights reserved.
5 * Copyright (c) 2004-2006 The University of Tennessee and The University
6 * of Tennessee Research Foundation. All rights
7 * reserved.
8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
9 * University of Stuttgart. All rights reserved.
10 * Copyright (c) 2004-2005 The Regents of the University of California.
11 * All rights reserved.
12 * $COPYRIGHT$
13 *
14 * Additional copyrights may follow
15 *
16 * $HEADER$
17 */
18
19 #ifndef OMPI_SEQ_TRACKER_H
20 #define OMPI_SEQ_TRACKER_H
21
22 #include "ompi_config.h"
23 #include "opal/class/opal_list.h"
24 #include "ompi/constants.h"
25
26 BEGIN_C_DECLS
27
28 struct ompi_seq_tracker_range_t{
29 opal_list_item_t super;
30 uint32_t seq_id_high;
31 uint32_t seq_id_low;
32 };
33 typedef struct ompi_seq_tracker_range_t ompi_seq_tracker_range_t;
34
35 OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_seq_tracker_range_t);
36
37 struct ompi_seq_tracker_t{
38 opal_list_t seq_ids; /**< list of seqs id's that have been seen */
39 ompi_seq_tracker_range_t* seq_ids_current; /**< a pointer to the last place we were in the list */
40
41 };
42 typedef struct ompi_seq_tracker_t ompi_seq_tracker_t;
43
44 OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_seq_tracker_t);
45
46
47 /**
48 * Look for duplicate sequence number in current range.
49 * Must be called w/ matching lock held.
50 */
51
52 OMPI_DECLSPEC bool ompi_seq_tracker_check_duplicate(
53 ompi_seq_tracker_t* seq_tracker,
54 uint32_t seq_id);
55
56
57 /*
58 * insert item into sequence tracking list,
59 * compacts continuous regions into a single entry
60 */
61 OMPI_DECLSPEC void ompi_seq_tracker_insert(ompi_seq_tracker_t* seq_tracker, uint32_t seq_i);
62
63 /*
64 * Copy state from one sequence tracker list into another.
65 */
66 OMPI_DECLSPEC void ompi_seq_tracker_copy(ompi_seq_tracker_t* dst, ompi_seq_tracker_t* src);
67
68 END_C_DECLS
69 #endif
70