Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dune-common
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Core Modules
dune-common
Commits
2cc784c6
Commit
2cc784c6
authored
20 years ago
by
Markus Blatt
Browse files
Options
Downloads
Patches
Plain Diff
Code cleanup.
[[Imported from SVN: r1015]]
parent
76358abd
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
common/arraylist.hh
+32
-9
32 additions, 9 deletions
common/arraylist.hh
common/test/arraylisttest.cc
+38
-9
38 additions, 9 deletions
common/test/arraylisttest.cc
with
70 additions
and
18 deletions
common/arraylist.hh
+
32
−
9
View file @
2cc784c6
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
// $Id$
#ifndef __DUNE_ARRAYLIST_HH__
#define __DUNE_ARRAYLIST_HH__
...
...
@@ -21,7 +23,6 @@ namespace std {
/**
* @brief Iterator traits for the Dune::ArrayListIterator.
*/
template
<
>
template
<
class
T
,
int
N
>
struct
iterator_traits
<
Dune
::
ArrayListIterator
<
T
,
N
>
>
{
typedef
T
value_type
;
...
...
@@ -128,6 +129,8 @@ namespace Dune {
int
capacity_
;
/** @brief The current number of elements in our data structure. */
int
size_
;
/** @brief The index of the first entry. */
int
start_
;
};
template
<
class
T
,
int
N
>
...
...
@@ -260,6 +263,11 @@ namespace Dune {
*/
memberType
*
operator
->
()
const
;
/**
* @brief Removes all indices before the current position.
*/
void
removeUpToHere
();
const
ArrayListIterator
<
memberType
,
N
>&
operator
=
(
const
ArrayListIterator
<
memberType
,
N
>&
other
);
ArrayListIterator
(
const
ArrayListIterator
<
memberType
,
N
>&
other
);
...
...
@@ -283,7 +291,7 @@ namespace Dune {
template
<
class
T
,
int
N
>
ArrayList
<
T
,
N
>::
ArrayList
()
:
capacity_
(
0
),
size_
(
0
){
ArrayList
<
T
,
N
>::
ArrayList
()
:
capacity_
(
0
),
size_
(
0
)
,
start_
(
0
)
{
chunks_
.
reserve
(
100
);
}
...
...
@@ -297,32 +305,32 @@ namespace Dune {
template
<
class
T
,
int
N
>
void
ArrayList
<
T
,
N
>::
push_back
(
const
T
&
entry
){
int
chunk
=
size_
/
chunkSize_
;
if
(
size_
==
capacity_
)
{
int
chunk
=
(
start_
+
size_
)
/
chunkSize_
;
if
(
(
start_
+
size_
)
==
capacity_
)
{
chunks_
[
chunk
]
=
new
FixedArray
<
memberType
,
chunkSize_
>
();
capacity_
+=
chunkSize_
;
}
chunks_
[
chunk
]
->
operator
[]((
size_
++
)
%
chunkSize_
)
=
entry
;
chunks_
[
chunk
]
->
operator
[]((
start_
+
size_
++
)
%
chunkSize_
)
=
entry
;
}
template
<
class
T
,
int
N
>
ArrayListIterator
<
T
,
N
>
ArrayList
<
T
,
N
>::
begin
(){
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
0
);
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
start_
);
}
template
<
class
T
,
int
N
>
const
ArrayListIterator
<
T
,
N
>
ArrayList
<
T
,
N
>::
begin
()
const
{
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
0
);
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
start_
);
}
template
<
class
T
,
int
N
>
ArrayListIterator
<
T
,
N
>
ArrayList
<
T
,
N
>::
end
(){
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
size_
);
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
start_
+
size_
);
}
template
<
class
T
,
int
N
>
const
ArrayListIterator
<
T
,
N
>
ArrayList
<
T
,
N
>::
end
()
const
{
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
size_
);
return
ArrayListIterator
<
T
,
N
>
(
*
this
,
start_
+
size_
);
}
template
<
class
T
,
int
N
>
...
...
@@ -454,6 +462,21 @@ namespace Dune {
return
*
this
;
}
template
<
class
T
,
int
N
>
void
ArrayListIterator
<
T
,
N
>::
removeUpToHere
(){
int
chunks
=
position_
/
chunkSize_
;
typedef
typename
std
::
vector
<
FixedArray
<
memberType
,
chunkSize_
>*
>::
iterator
iterator
;
iterator
chunk
=
list_
.
chunks_
.
begin
();
for
(
int
i
=
0
;
i
<
chunks
;
i
++
)
{
delete
(
*
chunk
);
chunk
=
list_
.
chunks_
.
erase
(
chunk
);
}
list_
.
start_
=
position_
%
chunkSize_
;
position_
=
list_
.
start_
;
}
template
<
class
T
,
int
N
>
ArrayListIterator
<
T
,
N
>::
ArrayListIterator
(
ArrayList
<
T
,
N
>&
arrayList
,
int
position
)
:
position_
(
position
),
list_
(
arrayList
){}
...
...
This diff is collapsed.
Click to expand it.
common/test/arraylisttest.cc
+
38
−
9
View file @
2cc784c6
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
// $Id$
#include
<dune/common/arraylist.hh>
#include
<iostream>
#include
<cstdlib>
...
...
@@ -60,6 +61,40 @@ void initConsecutive(Dune::ArrayList<double,size>& alist){
alist
.
push_back
(
i
);
}
int
testIteratorRemove
(){
using
namespace
Dune
;
ArrayList
<
double
,
10
>
alist
;
initConsecutive
(
alist
);
ArrayList
<
double
,
10
>::
iterator
iter
=
alist
.
begin
();
iter
+=
8
;
iter
.
removeUpToHere
();
++
iter
;
if
((
*
iter
)
!=
10
)
{
std
::
cerr
<<
"Removing from iterator failed! "
<<
__FILE__
<<
":"
<<
__LINE__
<<
std
::
endl
;
return
1
;
}
iter
=
alist
.
begin
();
if
((
*
iter
)
!=
10
)
{
std
::
cerr
<<
"Removing from iterator failed! "
<<
__FILE__
<<
":"
<<
__LINE__
<<
std
::
endl
;
return
1
;
}
iter
+=
3
;
iter
.
removeUpToHere
();
iter
+=
4
;
if
((
*
iter
)
!=
14
)
{
std
::
cerr
<<
"Removing from iterator failed! "
<<
__FILE__
<<
":"
<<
__LINE__
<<
std
::
endl
;
return
1
;
}
return
0
;
}
int
testRandomAccess
(){
using
namespace
Dune
;
ArrayList
<
double
,
10
>
alist
;
...
...
@@ -133,23 +168,17 @@ int main(){
int
ret
=
0
;
if
(
0
==
testComparison
())
cout
<<
"Comparison is OK."
<<
endl
;
else
{
if
(
0
!=
testComparison
())
{
ret
++
;
cerr
<<
"Comparison failed!"
<<
endl
;
}
if
(
0
==
testRandomAccess
())
cout
<<
"Radom Access is OK."
<<
endl
;
else
{
if
(
0
!=
testRandomAccess
())
{
ret
++
;
cerr
<<
"Ransom Access failed!"
<<
endl
;
}
if
(
0
==
testSorting
())
cout
<<
"Sorting is OK."
<<
endl
;
else
{
if
(
0
!=
testSorting
())
{
ret
++
;
cerr
<<
"Sorting failed!"
<<
endl
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment