Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
759306a3
Commit
759306a3
authored
May 04, 2017
by
Mark OLESEN
Browse files
STYLE: more consistent typedefs in Map, PtrMap, HashPtrTable
parent
e105e30b
Changes
8
Hide whitespace changes
Inline
Side-by-side
src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.C
View file @
759306a3
...
...
@@ -31,7 +31,7 @@ License
template
<
class
T
,
class
Key
,
class
Hash
>
Foam
::
HashPtrTable
<
T
,
Key
,
Hash
>::
HashPtrTable
(
const
label
size
)
:
HashTable
<
T
*
,
Key
,
Hash
>
(
size
)
parent_type
(
size
)
{}
...
...
@@ -41,7 +41,7 @@ Foam::HashPtrTable<T, Key, Hash>::HashPtrTable
const
HashPtrTable
<
T
,
Key
,
Hash
>&
ht
)
:
HashTable
<
T
*
,
Key
,
Hash
>
()
parent_type
(
ht
.
capacity
()
)
{
for
(
const_iterator
iter
=
ht
.
begin
();
iter
!=
ht
.
end
();
++
iter
)
{
...
...
@@ -73,7 +73,7 @@ template<class T, class Key, class Hash>
T
*
Foam
::
HashPtrTable
<
T
,
Key
,
Hash
>::
remove
(
iterator
&
iter
)
{
T
*
ptr
=
iter
.
object
();
HashTable
<
T
*
,
Key
,
Hash
>
::
erase
(
iter
);
this
->
parent_type
::
erase
(
iter
);
return
ptr
;
}
...
...
@@ -83,7 +83,7 @@ bool Foam::HashPtrTable<T, Key, Hash>::erase(iterator& iter)
{
T
*
ptr
=
iter
.
object
();
if
(
HashTable
<
T
*
,
Key
,
Hash
>
::
erase
(
iter
))
if
(
this
->
parent_type
::
erase
(
iter
))
{
if
(
ptr
)
{
...
...
@@ -107,7 +107,7 @@ void Foam::HashPtrTable<T, Key, Hash>::clear()
delete
iter
.
object
();
}
HashTable
<
T
*
,
Key
,
Hash
>
::
clear
();
this
->
parent_type
::
clear
();
}
...
...
src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H
View file @
759306a3
...
...
@@ -25,7 +25,7 @@ Class
Foam::HashPtrTable
Description
A HashTable
specialization for hashing pointers
.
A HashTable
of pointers to objects of type \<T\>
.
SourceFiles
HashPtrTable.C
...
...
@@ -51,7 +51,7 @@ class Ostream;
template
<
class
T
,
class
Key
,
class
Hash
>
class
HashPtrTable
;
template
<
class
T
,
class
Key
,
class
Hash
>
Istream
&
operator
>>
(
Istream
&
is
,
HashPtrTable
<
T
,
Key
,
Hash
>&
L
);
Istream
&
operator
>>
(
Istream
&
is
,
HashPtrTable
<
T
,
Key
,
Hash
>&
tbl
);
template
<
class
T
,
class
Key
,
class
Hash
>
Ostream
&
operator
<<
(
Ostream
&
os
,
const
HashPtrTable
<
T
,
Key
,
Hash
>&
tbl
);
...
...
@@ -77,11 +77,16 @@ class HashPtrTable
void
read
(
const
dictionary
&
dict
,
const
INew
&
inewt
);
public:
using
iterator
=
typename
HashTable
<
T
*
,
Key
,
Hash
>::
iterator
;
using
const_iterator
=
typename
HashTable
<
T
*
,
Key
,
Hash
>::
const_iterator
;
//- The template instance used for this table
typedef
HashPtrTable
<
T
,
Key
,
Hash
>
this_type
;
//- The template instance used for the parent HashTable
typedef
HashTable
<
T
*
,
Key
,
Hash
>
parent_type
;
using
iterator
=
typename
parent_type
::
iterator
;
using
const_iterator
=
typename
parent_type
::
const_iterator
;
// Constructors
...
...
@@ -100,7 +105,7 @@ public:
HashPtrTable
(
const
dictionary
&
dict
);
//- Construct as copy
HashPtrTable
(
const
HashPtrTable
<
T
,
Key
,
Hash
>
&
ht
);
HashPtrTable
(
const
this_type
&
ht
);
//- Destructor
...
...
@@ -109,25 +114,25 @@ public:
// Member Functions
// Edit
// Edit
//- Remove and return the pointer specified by given iterator
T
*
remove
(
iterator
&
iter
);
//- Remove and return the pointer specified by given iterator
T
*
remove
(
iterator
&
iter
);
//- Erase an hashedEntry specified by given iterator
bool
erase
(
iterator
&
iter
);
//- Erase an hashedEntry specified by given iterator
bool
erase
(
iterator
&
iter
);
//- Clear all entries from table
void
clear
();
//- Clear all entries from table
void
clear
();
//- Write
void
write
(
Ostream
&
os
)
const
;
//- Write
void
write
(
Ostream
&
os
)
const
;
// Member Operators
//- Copy assignment
void
operator
=
(
const
HashPtrTable
<
T
,
Key
,
Hash
>
&
rhs
);
void
operator
=
(
const
this_type
&
rhs
);
// IOstream Operators
...
...
@@ -135,7 +140,7 @@ public:
friend
Istream
&
operator
>>
<
T
,
Key
,
Hash
>
(
Istream
&
is
,
HashPtrTable
<
T
,
Key
,
Hash
>&
L
HashPtrTable
<
T
,
Key
,
Hash
>&
tbl
);
friend
Ostream
&
operator
<<
<
T
,
Key
,
Hash
>
...
...
src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableIO.C
View file @
759306a3
...
...
@@ -35,7 +35,7 @@ template<class T, class Key, class Hash>
template
<
class
INew
>
void
Foam
::
HashPtrTable
<
T
,
Key
,
Hash
>::
read
(
Istream
&
is
,
const
INew
&
inewt
)
{
is
.
fatalCheck
(
"HashPtrTable<T, Key, Hash>::read(Istream&, const INew&)"
);
is
.
fatalCheck
(
FUNCTION_NAME
);
token
firstToken
(
is
);
...
...
@@ -131,7 +131,7 @@ void Foam::HashPtrTable<T, Key, Hash>::read(Istream& is, const INew& inewt)
<<
exit
(
FatalIOError
);
}
is
.
fatalCheck
(
"HashPtrTable<T, Key, Hash>::read(Istream&, const INew&)"
);
is
.
fatalCheck
(
FUNCTION_NAME
);
}
...
...
@@ -145,11 +145,9 @@ void Foam::HashPtrTable<T, Key, Hash>::read
{
forAllConstIter
(
dictionary
,
dict
,
iter
)
{
this
->
insert
(
iter
().
keyword
(),
inewt
(
dict
.
subDict
(
iter
().
keyword
())).
ptr
()
);
const
word
&
k
=
iter
().
keyword
();
this
->
insert
(
k
,
inewt
(
dict
.
subDict
(
k
)).
ptr
());
}
}
...
...
@@ -195,10 +193,10 @@ Foam::HashPtrTable<T, Key, Hash>::HashPtrTable(const dictionary& dict)
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
template
<
class
T
,
class
Key
,
class
Hash
>
Foam
::
Istream
&
Foam
::
operator
>>
(
Istream
&
is
,
HashPtrTable
<
T
,
Key
,
Hash
>&
L
)
Foam
::
Istream
&
Foam
::
operator
>>
(
Istream
&
is
,
HashPtrTable
<
T
,
Key
,
Hash
>&
tbl
)
{
L
.
clear
();
L
.
read
(
is
,
INew
<
T
>
());
tbl
.
clear
();
tbl
.
read
(
is
,
INew
<
T
>
());
return
is
;
}
...
...
@@ -232,8 +230,7 @@ Foam::Ostream& Foam::operator<<
// Write end delimiter
os
<<
token
::
END_LIST
;
// Check state of IOstream
os
.
check
(
"Ostream& operator<<(Ostream&, const HashPtrTable&)"
);
os
.
check
(
FUNCTION_NAME
);
return
os
;
}
...
...
src/OpenFOAM/containers/HashTables/Map/Map.H
View file @
759306a3
...
...
@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation |
Copyright (C) 2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
...
...
@@ -51,50 +51,54 @@ class Map
:
public
HashTable
<
T
,
label
,
Hash
<
label
>>
{
public:
typedef
typename
HashTable
<
T
,
label
,
Hash
<
label
>>::
iterator
iterator
;
//- The template instance used for this Map
typedef
Map
<
T
>
this_type
;
//- The template instance used for the parent HashTable
typedef
HashTable
<
T
,
label
,
Hash
<
label
>>
parent_type
;
using
iterator
=
typename
parent_type
::
iterator
;
using
const_iterator
=
typename
parent_type
::
const_iterator
;
typedef
typename
HashTable
<
T
,
label
,
Hash
<
label
>>::
const_iterator
const_iterator
;
// Constructors
//- Construct given initial size
Map
(
const
label
size
=
128
)
:
HashTable
<
T
,
label
,
Hash
<
label
>>
(
size
)
parent_type
(
size
)
{}
//- Construct from Istream
Map
(
Istream
&
is
)
:
HashTable
<
T
,
label
,
Hash
<
label
>>
(
is
)
parent_type
(
is
)
{}
//- Construct as copy
Map
(
const
Map
<
T
>&
map
)
:
HashTable
<
T
,
label
,
Hash
<
label
>>
(
map
)
parent_type
(
map
)
{}
//- Construct by transferring the parameter contents
Map
(
const
Xfer
<
Map
<
T
>>&
map
)
:
HashTable
<
T
,
label
,
Hash
<
label
>>
(
map
)
parent_type
(
map
)
{}
//- Construct by transferring the parameter contents
Map
(
const
Xfer
<
HashTable
<
T
,
label
,
Hash
<
label
>>>&
map
)
:
HashTable
<
T
,
label
,
Hash
<
label
>>
(
map
)
parent_type
(
map
)
{}
//- Construct from an initializer list
Map
(
std
::
initializer_list
<
Tuple2
<
label
,
T
>>
map
)
:
HashTable
<
T
,
label
,
Hash
<
label
>>
(
map
)
parent_type
(
map
)
{}
};
...
...
src/OpenFOAM/containers/HashTables/PtrMap/PtrMap.H
View file @
759306a3
...
...
@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation |
Copyright (C) 2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
...
...
@@ -51,27 +51,33 @@ class PtrMap
:
public
HashPtrTable
<
T
,
label
,
Hash
<
label
>>
{
public:
//- The template instance used for this PtrMap
typedef
PtrMap
<
T
>
this_type
;
//- The template instance used for the parent HashTable
typedef
HashPtrTable
<
T
,
label
,
Hash
<
label
>>
parent_type
;
// Constructors
//- Construct given initial map size
PtrMap
(
const
label
size
=
128
)
:
HashPtrTable
<
T
,
label
,
Hash
<
label
>>
(
size
)
parent_type
(
size
)
{}
//- Construct from Istream
PtrMap
(
Istream
&
is
)
:
HashPtrTable
<
T
,
label
,
Hash
<
label
>>
(
is
)
parent_type
(
is
)
{}
//- Construct as copy
PtrMap
(
const
PtrMap
<
T
>
&
map
)
PtrMap
(
const
this_type
&
map
)
:
HashPtrTable
<
T
,
label
,
Hash
<
label
>>
(
map
)
parent_type
(
map
)
{}
};
...
...
src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTable.C
View file @
759306a3
...
...
@@ -30,32 +30,6 @@ License
#include
"List.H"
#include
"IOstreams.H"
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
Foam
::
label
Foam
::
StaticHashTableCore
::
canonicalSize
(
const
label
size
)
{
if
(
size
<
1
)
{
return
0
;
}
// Enforce power of two
unsigned
int
goodSize
=
size
;
if
(
goodSize
&
(
goodSize
-
1
))
{
// Brute-force is fast enough
goodSize
=
1
;
while
(
goodSize
<
unsigned
(
size
))
{
goodSize
<<=
1
;
}
}
return
goodSize
;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template
<
class
T
,
class
Key
,
class
Hash
>
...
...
src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTable.H
View file @
759306a3
...
...
@@ -79,7 +79,7 @@ template<class T, class Key, class Hash> Ostream& operator<<
struct
StaticHashTableCore
{
//- Return a canonical (power-of-two) size
static
label
canonicalSize
(
const
label
);
static
label
canonicalSize
(
const
label
size
);
//- Construct null
StaticHashTableCore
()
...
...
src/OpenFOAM/containers/HashTables/StaticHashTable/StaticHashTableCore.C
View file @
759306a3
...
...
@@ -24,6 +24,7 @@ License
\*---------------------------------------------------------------------------*/
#include
"StaticHashTable.H"
#include
"uLabel.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
...
...
@@ -33,4 +34,41 @@ defineTypeNameAndDebug(StaticHashTableCore, 0);
}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam
::
label
Foam
::
StaticHashTableCore
::
canonicalSize
(
const
label
size
)
{
if
(
size
<
1
)
{
return
0
;
}
// Enforce power of two - makes for a vey fast modulus etc.
// The value '8' is some arbitrary lower limit.
// If the hash table is too small, there will be many table collisions!
const
uLabel
unsigned_size
=
size
;
uLabel
powerOfTwo
=
8
;
if
(
size
<
powerOfTwo
)
{
return
powerOfTwo
;
}
else
if
(
unsigned_size
&
(
unsigned_size
-
1
))
// <- Modulus of i^2
{
// Determine power-of-two. Brute-force is fast enough.
while
(
powerOfTwo
<
unsigned_size
)
{
powerOfTwo
<<=
1
;
}
return
powerOfTwo
;
}
else
{
return
unsigned_size
;
}
}
// ************************************************************************* //
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment