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
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* This file is part of the class library */
/* SoPlex --- the Sequential object-oriented simPlex. */
/* */
/* Copyright 1996-2022 Zuse Institute Berlin */
/* */
/* Licensed 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. */
/* */
/* You should have received a copy of the Apache-2.0 license */
/* along with SoPlex; see the file LICENSE. If not email to soplex@zib.de. */
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**@file datakey.h
* @brief Entry identifier class for items of a DataSet.
*/
#ifndef _DATAKEY_H_
#define _DATAKEY_H_
#include <assert.h>
namespace soplex
{
/**@brief Entry identifier class for items of a DataSet.
@ingroup Elementary
Every item in a DataSet is assigned a DataKey by which it can be
accessed (using DataSet::operator[]()). A DataKey consists of an integer
member #idx, which is a positive number for any valid DataKey. No
#idx of an element in a DataSet may exceed the sets max().
This property may be used to build arrays with additional information to
the elements of a DataSet.
In addition, #DataKey%s provide a member #info which can be used to store
further information.
Each DataKey is unique for one DataSet but different DataSets may (and
generally will) manage the same #DataKey%s. When an element is removed from
a DataSet its DataKey may (and generally will) be reused for other
elements added to the DataSet later on.
@todo data members should be private.
*/
class DataKey
{
public:
//-------------------------------------
/**@name Data */
///@{
/* This was originally implemented as bitfield "signed int info: 2; signed int idx: (8 * sizeof(int) - 2);",
however, this seems to trigger a bug with old versions of GCC/glibc on 32bit machines. */
int info; ///< user information to store values -1, 0, +1
int idx; ///< (locally) unique key index
///@}
public:
//-------------------------------------
/**@name Constructors / destructors */
///@{
/// Default constructor. Constructs an invalid DataKey.
DataKey()
: info(0), idx(-1)
{}
// Full constructor
DataKey(int p_info, int p_idx)
: info(p_info)
, idx(p_idx)
{
assert(p_info <= 1 && p_info >= -1);
}
///@}
//-------------------------------------
/**@name Access / modification */
///@{
/// gets the index number (\ref soplex::DataKey::idx "idx") of the DataKey.
inline int getIdx() const
{
return idx;
}
/// sets the index number (\ref soplex::DataKey::idx "idx") of the DataKey.
inline void setIdx(int p_idx)
{
idx = p_idx;
}
/// returns TRUE, iff the DataKey is valid.
inline bool isValid() const
{
return idx >= 0;
}
/// makes the DataKey invalid and clears the \ref soplex::DataKey::info "info" field.
inline void inValidate()
{
idx = -1;
info = 0;
}
///@}
};
} // namespace soplex
#endif // _DATAKEY_H_