Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / mesh / cfMesh / utilities / containers / VRWGraph / VRWGraph.C
blob8b672d822b98f40b2942bcd8b15043cec39fbcde
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | cfMesh: A library for mesh generation
4    \\    /   O peration     |
5     \\  /    A nd           | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6      \\/     M anipulation  | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9     This file is part of cfMesh.
11     cfMesh is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 3 of the License, or (at your
14     option) any later version.
16     cfMesh is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with cfMesh.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "VRWGraph.H"
27 #include "token.H"
28 #include "labelList.H"
30 // * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
32 Foam::Ostream& Foam::operator<<
34     Foam::Ostream& os,
35     const Foam::VRWGraph& DL
38     os << DL.size() << nl << token::BEGIN_LIST;
40     for(register label i=0;i<DL.size();++i)
41     {
42         os << nl << DL.sizeOfRow(i) << token::BEGIN_LIST;
43         for(label j=0;j<DL.sizeOfRow(i);++j)
44         {
45             if( j > 0 ) os << token::SPACE;
47             os << DL(i, j);
48         }
50         os << token::END_LIST;
51     }
53     os << nl << token::END_LIST;
54     return os;
58 template<class T, Foam::label width>
59 Foam::Istream& Foam::operator>>
61     Foam::Istream& is,
62     Foam::VRWGraph<T, width>& DL
65     label size;
66     T e;
67     is >> size;
68     DL.setSize(size);
69     for(IndexType i=0;i<size;++i)
70     {
71         is >> e;
72         DL[i] = e;
73     }
75     return is;
79 void Foam::VRWGraph::optimizeMemoryUsage()
81     labelLongList newPosForNode(data_.size());
82     label pos(0), nElements;
83     nElements = data_.size();
84     for(label elI=0;elI<nElements;++elI)
85         if( data_[elI] != FREEENTRY )
86         {
87             newPosForNode[elI] = pos++;
88         }
89         else
90         {
91             newPosForNode[elI] = -1;
92         }
94     //- create new data
95     for(label elI=0;elI<nElements;++elI)
96         if( (newPosForNode[elI] != -1) && (newPosForNode[elI] < elI) )
97             data_[newPosForNode[elI]] = data_[elI];
99     data_.setSize(pos);
101     //- renumber rows
102     nElements = rows_.size();
103     for(label rowI=0;rowI<nElements;++rowI)
104         if( rows_[rowI].start() != INVALIDROW )
105             rows_[rowI].start() = newPosForNode[rows_[rowI].start()];
108 // ************************************************************************* //