mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: add HashTable::writeKeys and HashSet::writeList
- can use the hash-set writeList in combination with FlatOutput: Eg, flatOutput(myHashSet);
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -29,6 +29,7 @@ Description
|
|||||||
#include "HashSet.H"
|
#include "HashSet.H"
|
||||||
#include "Map.H"
|
#include "Map.H"
|
||||||
#include "labelPairHashes.H"
|
#include "labelPairHashes.H"
|
||||||
|
#include "FlatOutput.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
@ -66,6 +67,8 @@ int main(int argc, char *argv[])
|
|||||||
tableB.insert("value5", nil());
|
tableB.insert("value5", nil());
|
||||||
tableB.insert("value6", nil());
|
tableB.insert("value6", nil());
|
||||||
|
|
||||||
|
Info<< "tableA keys: "; tableA.writeKeys(Info) << endl;
|
||||||
|
|
||||||
Map<label> mapA
|
Map<label> mapA
|
||||||
{
|
{
|
||||||
{ 1, 1 },
|
{ 1, 1 },
|
||||||
@ -149,7 +152,7 @@ int main(int argc, char *argv[])
|
|||||||
labelHashSet setD(1);
|
labelHashSet setD(1);
|
||||||
setD.insert({11, 100, 49, 36, 2008});
|
setD.insert({11, 100, 49, 36, 2008});
|
||||||
|
|
||||||
Info<< "setD : " << setD << endl;
|
Info<< "setD : " << flatOutput(setD) << endl;
|
||||||
|
|
||||||
Info<< "setB == setC: " << (setB == setC) << endl;
|
Info<< "setB == setC: " << (setB == setC) << endl;
|
||||||
Info<< "setC != setD: " << (setC != setD) << endl;
|
Info<< "setC != setD: " << (setC != setD) << endl;
|
||||||
@ -188,7 +191,7 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "setD has no 11" << endl;
|
Info<< "setD has no 11" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< "setD : " << setD << endl;
|
Info<< "setD : " << flatOutput(setD) << endl;
|
||||||
|
|
||||||
// this doesn't work (yet?)
|
// this doesn't work (yet?)
|
||||||
// setD[12] = true;
|
// setD[12] = true;
|
||||||
@ -201,7 +204,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
label added = setD.set(someLst);
|
label added = setD.set(someLst);
|
||||||
Info<< "added " << added << " from " << someLst.size() << endl;
|
Info<< "added " << added << " from " << someLst.size() << endl;
|
||||||
Info<< "setD : " << setD << endl;
|
Info<< "setD : " << flatOutput(setD) << endl;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -267,6 +267,15 @@ void Foam::HashSet<Key, Hash>::operator-=(const HashSet<Key, Hash>& rhs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Key, class Hash>
|
||||||
|
Foam::Ostream& Foam::operator<<(Ostream& os, const HashSet<Key, Hash>& tbl)
|
||||||
|
{
|
||||||
|
return tbl.writeList(os, 10); // 10=consistent with UList
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * Global operators * * * * * * * * * * * * * */
|
/* * * * * * * * * * * * * * * * Global operators * * * * * * * * * * * * * */
|
||||||
|
|
||||||
template<class Key, class Hash>
|
template<class Key, class Hash>
|
||||||
|
|||||||
@ -209,6 +209,16 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Writing
|
||||||
|
|
||||||
|
//- Write the unordered keys as a list, with line-breaks if list length
|
||||||
|
// exceeds shortListLen. Using '0' suppresses line-breaks entirely.
|
||||||
|
Ostream& writeList(Ostream& os, const label shortListLen=0) const
|
||||||
|
{
|
||||||
|
return this->writeKeys(os, shortListLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Member Operators
|
// Member Operators
|
||||||
|
|
||||||
//- Return true if the entry exists, same as found()
|
//- Return true if the entry exists, same as found()
|
||||||
|
|||||||
@ -261,9 +261,6 @@ public:
|
|||||||
//- Return the table of contents as a sorted list
|
//- Return the table of contents as a sorted list
|
||||||
List<Key> sortedToc() const;
|
List<Key> sortedToc() const;
|
||||||
|
|
||||||
//- Print information
|
|
||||||
Ostream& printInfo(Ostream& os) const;
|
|
||||||
|
|
||||||
|
|
||||||
// Edit
|
// Edit
|
||||||
|
|
||||||
@ -572,6 +569,15 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Writing
|
||||||
|
|
||||||
|
//- Print information
|
||||||
|
Ostream& printInfo(Ostream& os) const;
|
||||||
|
|
||||||
|
//- Write the unordered keys as a list, with line-breaks if list length
|
||||||
|
// exceeds shortListLen. Using '0' suppresses line-breaks entirely.
|
||||||
|
Ostream& writeKeys(Ostream& os, const label shortListLen=0) const;
|
||||||
|
|
||||||
|
|
||||||
// IOstream Operator
|
// IOstream Operator
|
||||||
|
|
||||||
|
|||||||
@ -54,8 +54,7 @@ Foam::HashTable<T, Key, Hash>::HashTable(Istream& is, const label size)
|
|||||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
Foam::Ostream&
|
Foam::Ostream& Foam::HashTable<T, Key, Hash>::printInfo(Ostream& os) const
|
||||||
Foam::HashTable<T, Key, Hash>::printInfo(Ostream& os) const
|
|
||||||
{
|
{
|
||||||
label used = 0;
|
label used = 0;
|
||||||
label maxChain = 0;
|
label maxChain = 0;
|
||||||
@ -90,6 +89,53 @@ Foam::HashTable<T, Key, Hash>::printInfo(Ostream& os) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class Key, class Hash>
|
||||||
|
Foam::Ostream& Foam::HashTable<T, Key, Hash>::writeKeys
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const label shortListLen
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Similar to UList::writeList version except the following:
|
||||||
|
// - the keys can never be uniform
|
||||||
|
// - never write in binary
|
||||||
|
|
||||||
|
label i = this->size();
|
||||||
|
|
||||||
|
if (i <= 1 || !shortListLen || (i <= shortListLen))
|
||||||
|
{
|
||||||
|
// Write size and start delimiter
|
||||||
|
os << i << token::BEGIN_LIST;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
for (const_iterator iter = this->cbegin(); iter != this->cend(); ++iter)
|
||||||
|
{
|
||||||
|
if (i++) os << token::SPACE;
|
||||||
|
os << iter.key();
|
||||||
|
}
|
||||||
|
|
||||||
|
os << token::END_LIST; // End delimiter
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Write size and start delimiter
|
||||||
|
os << nl << i << nl << token::BEGIN_LIST << nl;
|
||||||
|
|
||||||
|
for (const_iterator iter = this->cbegin(); iter != this->cend(); ++iter)
|
||||||
|
{
|
||||||
|
os << iter.key() << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
os << token::END_LIST << nl; // End delimiter
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check state of IOstream
|
||||||
|
os.check("HashSet<Key>::writeList(Ostream&)");
|
||||||
|
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
|
|||||||
Reference in New Issue
Block a user