FEI Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
base
snl_fei_MapContig.hpp
Go to the documentation of this file.
1
#ifndef _snl_fei_MapContig_hpp_
2
#define _snl_fei_MapContig_hpp_
3
4
/*--------------------------------------------------------------------*/
5
/* Copyright 2005 Sandia Corporation. */
6
/* Under the terms of Contract DE-AC04-94AL85000, there is a */
7
/* non-exclusive license for use of this work by or on behalf */
8
/* of the U.S. Government. Export of this program may require */
9
/* a license from the United States Government. */
10
/*--------------------------------------------------------------------*/
11
12
#include <
fei_macros.hpp
>
13
14
namespace
snl_fei
{
15
18
template
<
typename
VAL_TYPE>
19
class
MapContig
{
20
public
:
22
MapContig
(
int
firstKey,
int
lastKey);
24
MapContig
(
const
MapContig<VAL_TYPE>
& src);
26
virtual
~MapContig
();
27
29
typedef
int
key_type
;
30
32
typedef
VAL_TYPE
mapped_type
;
33
35
typedef
typename
std::pair<int,VAL_TYPE>
value_type
;
36
38
class
iterator
{
39
public
:
41
iterator
() :
offset_
(-1),
mapPtr_
(0) {}
42
44
iterator
(
int
offset,
45
MapContig<VAL_TYPE>
* mapPtr)
46
:
offset_
(offset),
mapPtr_
(mapPtr)
47
{
48
}
49
51
virtual
~iterator
() {}
52
54
iterator
&
operator++
()
55
{
56
if
(!
mapPtr_
)
return
(*
this
);
57
int
len =
mapPtr_
->len_;
58
int
* keysPtr =
mapPtr_
->keysPtr_;
59
int
first =
mapPtr_
->first_;
60
if
(
offset_
< len) {
61
++
offset_
;
62
while
(
offset_
< len) {
63
if
(keysPtr[
offset_
] >= first)
break
;
64
++
offset_
;
65
}
66
}
67
return
(*
this
);
68
}
69
71
bool
operator==
(
const
iterator
& rhs)
72
{
73
return
(
offset_
== rhs.
offset_
);
74
}
75
77
bool
operator!=
(
const
iterator
& rhs)
78
{
79
return
(
offset_
!= rhs.
offset_
);
80
}
81
83
value_type
operator*
()
84
{
85
if
(!
mapPtr_
)
return
(
value_type
(0,0));
86
87
if
(
offset_
==
mapPtr_
->len_)
return
(
value_type
(0,0));
88
89
return
(
value_type
(
mapPtr_
->keysPtr_[
offset_
],
mapPtr_
->valuesPtr_[
offset_
]));
90
}
91
93
iterator
&
operator=
(
const
iterator
& src)
94
{
95
offset_
= src.
offset_
;
96
mapPtr_
= src.
mapPtr_
;
97
return
(*
this
);
98
}
99
101
int
offset_
;
102
private
:
103
MapContig<VAL_TYPE>
*
mapPtr_
;
104
};
//class iterator
105
107
iterator
begin
();
109
iterator&
end
();
110
112
std::pair<iterator,bool>
insert
(
value_type
val);
113
115
iterator
insert
(iterator& pos,
value_type
val);
116
118
iterator
find
(
int
key);
119
121
iterator
lower_bound
(
int
key);
122
124
int
size
()
const
;
125
126
private
:
127
friend
class
iterator;
128
129
std::vector<int>
keys_
;
130
int
*
keysPtr_
;
131
iterator
m_end_
;
132
std::vector<VAL_TYPE>
values_
;
133
VAL_TYPE*
valuesPtr_
;
134
int
first_
;
135
int
len_
;
136
};
//class MapContig
137
138
template
<
typename
VAL_TYPE>
139
MapContig<VAL_TYPE>::MapContig
(
int
firstKey,
int
lastKey)
140
:
keys_
(lastKey-firstKey+1),
141
m_end_
(),
142
values_
(lastKey-firstKey+1),
143
first_
(firstKey),
144
len_
(lastKey-firstKey+1)
145
{
146
keysPtr_
=
keys_
.size()>0 ? &
keys_
[0] : NULL;
147
for
(
int
i=0; i<
len_
; ++i) {
148
keysPtr_
[i] = firstKey+i;
149
}
150
valuesPtr_
=
values_
.size()>0 ? &
values_
[0] : NULL;
151
len_
=
keys_
.size();
152
m_end_
=
iterator
(
len_
,
this
);
153
}
154
155
template
<
typename
VAL_TYPE>
156
MapContig<VAL_TYPE>::MapContig
(
const
MapContig<VAL_TYPE>
& src)
157
:
keys_
(src.
keys_
),
158
m_end_
(),
159
values_
(src.
values_
),
160
first_
(src.
first_
),
161
len_
(src.
len_
)
162
{
163
keysPtr_
=
keys_
.size()>0 ? &
keys_
[0] : NULL;
164
valuesPtr_
=
values_
.size()>0 ? &
values_
[0] : NULL;
165
m_end_
=
iterator
(
len_
,
this
);
166
}
167
168
template
<
typename
VAL_TYPE>
169
MapContig<VAL_TYPE>::~MapContig
()
170
{
171
}
172
173
template
<
typename
VAL_TYPE>
174
inline
typename
MapContig<VAL_TYPE>::iterator
MapContig<VAL_TYPE>::begin
()
175
{
176
return
(
iterator
(0,
this
) );
177
}
178
179
template
<
typename
VAL_TYPE>
180
inline
typename
MapContig<VAL_TYPE>::iterator
&
MapContig<VAL_TYPE>::end
()
181
{
182
return
(
m_end_
);
183
}
184
185
template
<
typename
VAL_TYPE>
186
inline
std::pair<typename MapContig<VAL_TYPE>::iterator,
bool
>
187
MapContig<VAL_TYPE>::insert
(
typename
MapContig<VAL_TYPE>::value_type
val)
188
{
189
int
localkey = val.first - first_;
190
if
(localkey < 0 || localkey >= len_) {
191
return
( std::pair<iterator,bool>(m_end_,
false
) );
192
}
193
194
valuesPtr_[localkey] = val.second;
195
196
return
( std::pair<iterator,bool>(iterator(localkey,
this
),
true
));
197
}
198
199
template
<
typename
VAL_TYPE>
200
inline
typename
MapContig<VAL_TYPE>::iterator
201
MapContig<VAL_TYPE>::insert
(
typename
MapContig<VAL_TYPE>::iterator
& pos,
202
typename
MapContig<VAL_TYPE>::value_type
val)
203
{
204
int
offset = pos.
offset_
;
205
if
(offset < 0 || offset >=len_ || pos == m_end_) {
206
offset = val.first - first_;
207
if
(offset < 0 || offset >= len_) {
208
return
(m_end_);
209
}
210
}
211
212
valuesPtr_[offset] = val.second;
213
214
return
( iterator(offset,
this
) );
215
}
216
217
template
<
typename
VAL_TYPE>
218
inline
typename
MapContig<VAL_TYPE>::iterator
MapContig<VAL_TYPE>::find
(
int
key)
219
{
220
int
localkey = key -
first_
;
221
if
(localkey < 0 || localkey >=
len_
) {
222
return
(
m_end_
);
223
}
224
225
return
(
iterator
(localkey,
this
));
226
}
227
228
template
<
typename
VAL_TYPE>
229
inline
typename
MapContig<VAL_TYPE>::iterator
MapContig<VAL_TYPE>::lower_bound
(
int
key)
230
{
231
int
localkey = key -
first_
;
232
if
(localkey < 0 || localkey >=
len_
) {
233
return
(
m_end_
);
234
}
235
236
return
(
iterator
(localkey,
this
));
237
}
238
239
template
<
typename
VAL_TYPE>
240
int
MapContig<VAL_TYPE>::size
()
const
241
{
242
return
(
len_
);
243
}
244
245
}
//namespace snl_fei
246
247
#endif
248
snl_fei::MapContig::iterator
Definition
snl_fei_MapContig.hpp:38
snl_fei::MapContig::iterator::mapPtr_
MapContig< VAL_TYPE > * mapPtr_
Definition
snl_fei_MapContig.hpp:103
snl_fei::MapContig::iterator::operator!=
bool operator!=(const iterator &rhs)
Definition
snl_fei_MapContig.hpp:77
snl_fei::MapContig::iterator::iterator
iterator(int offset, MapContig< VAL_TYPE > *mapPtr)
Definition
snl_fei_MapContig.hpp:44
snl_fei::MapContig::iterator::operator=
iterator & operator=(const iterator &src)
Definition
snl_fei_MapContig.hpp:93
snl_fei::MapContig::iterator::offset_
int offset_
Definition
snl_fei_MapContig.hpp:101
snl_fei::MapContig::iterator::operator*
value_type operator*()
Definition
snl_fei_MapContig.hpp:83
snl_fei::MapContig::iterator::operator++
iterator & operator++()
Definition
snl_fei_MapContig.hpp:54
snl_fei::MapContig::iterator::~iterator
virtual ~iterator()
Definition
snl_fei_MapContig.hpp:51
snl_fei::MapContig::iterator::iterator
iterator()
Definition
snl_fei_MapContig.hpp:41
snl_fei::MapContig::iterator::operator==
bool operator==(const iterator &rhs)
Definition
snl_fei_MapContig.hpp:71
snl_fei::MapContig< fei::ctg_set< int > * >::first_
int first_
Definition
snl_fei_MapContig.hpp:134
snl_fei::MapContig::MapContig
MapContig(int firstKey, int lastKey)
Definition
snl_fei_MapContig.hpp:139
snl_fei::MapContig::~MapContig
virtual ~MapContig()
Definition
snl_fei_MapContig.hpp:169
snl_fei::MapContig< fei::ctg_set< int > * >::values_
std::vector< fei::ctg_set< int > * > values_
Definition
snl_fei_MapContig.hpp:132
snl_fei::MapContig::insert
std::pair< iterator, bool > insert(value_type val)
snl_fei::MapContig::begin
iterator begin()
Definition
snl_fei_MapContig.hpp:174
snl_fei::MapContig::key_type
int key_type
Definition
snl_fei_MapContig.hpp:29
snl_fei::MapContig< fei::ctg_set< int > * >::keys_
std::vector< int > keys_
Definition
snl_fei_MapContig.hpp:129
snl_fei::MapContig::iterator
friend class iterator
Definition
snl_fei_MapContig.hpp:127
snl_fei::MapContig< fei::ctg_set< int > * >::keysPtr_
int * keysPtr_
Definition
snl_fei_MapContig.hpp:130
snl_fei::MapContig::find
iterator find(int key)
Definition
snl_fei_MapContig.hpp:218
snl_fei::MapContig::lower_bound
iterator lower_bound(int key)
Definition
snl_fei_MapContig.hpp:229
snl_fei::MapContig::value_type
std::pair< int, VAL_TYPE > value_type
Definition
snl_fei_MapContig.hpp:35
snl_fei::MapContig< fei::ctg_set< int > * >::valuesPtr_
fei::ctg_set< int > ** valuesPtr_
Definition
snl_fei_MapContig.hpp:133
snl_fei::MapContig::size
int size() const
Definition
snl_fei_MapContig.hpp:240
snl_fei::MapContig::end
iterator & end()
Definition
snl_fei_MapContig.hpp:180
snl_fei::MapContig< fei::ctg_set< int > * >::len_
int len_
Definition
snl_fei_MapContig.hpp:135
snl_fei::MapContig::insert
iterator insert(iterator &pos, value_type val)
snl_fei::MapContig< fei::ctg_set< int > * >::m_end_
iterator m_end_
Definition
snl_fei_MapContig.hpp:131
snl_fei::MapContig::MapContig
MapContig(const MapContig< VAL_TYPE > &src)
Definition
snl_fei_MapContig.hpp:156
snl_fei::MapContig::mapped_type
VAL_TYPE mapped_type
Definition
snl_fei_MapContig.hpp:32
fei_macros.hpp
snl_fei
Definition
fei_MatrixGraph_Impl2.cpp:46
Generated by
1.17.0