summaryrefslogtreecommitdiff
path: root/subversion/libsvn_fs_x/id.h
blob: e5840431648167994ef5cd54009e3264431f4e87 (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* id.h : interface to FSX-internal ID functions
 *
 * ====================================================================
 *    Licensed to the Apache Software Foundation (ASF) under one
 *    or more contributor license agreements.  See the NOTICE file
 *    distributed with this work for additional information
 *    regarding copyright ownership.  The ASF licenses this file
 *    to you under the Apache License, Version 2.0 (the
 *    "License"); you may not use this file except in compliance
 *    with the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing,
 *    software distributed under the License is distributed on an
 *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *    KIND, either express or implied.  See the License for the
 *    specific language governing permissions and limitations
 *    under the License.
 * ====================================================================
 */

#ifndef SVN_LIBSVN_FS_X_ID_H
#define SVN_LIBSVN_FS_X_ID_H

#include "svn_fs.h"

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/* Unique identifier for a transaction within the given repository. */
typedef apr_int64_t svn_fs_x__txn_id_t;

/* svn_fs_x__txn_id_t value for everything that is not a transaction. */
#define SVN_FS_X__INVALID_TXN_ID ((svn_fs_x__txn_id_t)(-1))

/* Change set is the umbrella term for transaction and revision in FSX.
 * Revision numbers (>=0) map 1:1 onto change sets while txns are mapped
 * onto the negatve value range. */
typedef apr_int64_t svn_fs_x__change_set_t;

/* Invalid / unused change set number. */
#define SVN_FS_X__INVALID_CHANGE_SET  ((svn_fs_x__change_set_t)(-1))

/* Return TRUE iff the CHANGE_SET refers to a revision
   (will return FALSE for SVN_INVALID_REVNUM). */
svn_boolean_t
svn_fs_x__is_revision(svn_fs_x__change_set_t change_set);

/* Return TRUE iff the CHANGE_SET refers to a transaction
   (will return FALSE for SVN_FS_X__INVALID_TXN_ID). */
svn_boolean_t
svn_fs_x__is_txn(svn_fs_x__change_set_t change_set);

/* Return the revision number that corresponds to CHANGE_SET.
   Will SVN_INVALID_REVNUM for transactions. */
svn_revnum_t
svn_fs_x__get_revnum(svn_fs_x__change_set_t change_set);

/* Return the transaction ID that corresponds to CHANGE_SET.
   Will SVN_FS_X__INVALID_TXN_ID for revisions. */
svn_fs_x__txn_id_t
svn_fs_x__get_txn_id(svn_fs_x__change_set_t change_set);

/* Convert REVNUM into a change set number */
svn_fs_x__change_set_t
svn_fs_x__change_set_by_rev(svn_revnum_t revnum);

/* Convert TXN_ID into a change set number */
svn_fs_x__change_set_t
svn_fs_x__change_set_by_txn(svn_fs_x__txn_id_t txn_id);

/* An ID in FSX consists of a creation CHANGE_SET number and some changeset-
 * local counter value (NUMBER).
 */
typedef struct svn_fs_x__id_t
{
  svn_fs_x__change_set_t change_set;

  apr_uint64_t number;
} svn_fs_x__id_t;


/*** Operations on ID parts. ***/

/* Return TRUE, if both elements of the PART is 0, i.e. this is the default
 * value if e.g. no copies were made of this node. */
svn_boolean_t
svn_fs_x__id_is_root(const svn_fs_x__id_t *part);

/* Return TRUE, if all element values of *LHS and *RHS match. */
svn_boolean_t
svn_fs_x__id_eq(const svn_fs_x__id_t *lhs,
                const svn_fs_x__id_t *rhs);

/* Parse the NUL-terminated ID part at DATA and write the result into *PART.
 */
svn_error_t *
svn_fs_x__id_parse(svn_fs_x__id_t *part,
                   const char *data);

/* Convert ID into string form, allocated in RESULT_POOL. */
svn_string_t *
svn_fs_x__id_unparse(const svn_fs_x__id_t*id,
                     apr_pool_t *result_pool);

/* Set *PART to "unused". */
void
svn_fs_x__id_reset(svn_fs_x__id_t *part);

/* Return TRUE if *PART is belongs to either a revision or transaction. */
svn_boolean_t
svn_fs_x__id_used(const svn_fs_x__id_t *part);

/* Return 0 if A and B are equal, 1 if A is "greater than" B, -1 otherwise. */
int
svn_fs_x__id_compare(const svn_fs_x__id_t *a,
                     const svn_fs_x__id_t *b);

/* Set *NODEREV_ID to the root node ID of transaction TXN_ID. */
void
svn_fs_x__init_txn_root(svn_fs_x__id_t *noderev_id,
                        svn_fs_x__txn_id_t txn_id);

/* Set *NODEREV_ID to the root node ID of revision REV. */
void
svn_fs_x__init_rev_root(svn_fs_x__id_t *noderev_id,
                        svn_revnum_t rev);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* SVN_LIBSVN_FS_X_ID_H */