BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / OpenFOAM / db / IOstreams / hashes / OSHA1stream.H
blob49f5f439f2d54a051f2c241694d65f096a106786
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM 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 OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::OSHA1stream
27 Description
28     An output stream for calculating SHA1 digests.
30 SourceFiles
31     OSHA1stream.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef OSHA1stream_H
36 #define OSHA1stream_H
38 #include "OSstream.H"
39 #include "SHA1.H"
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 namespace Foam
46 class osha1stream;
47 class OSHA1stream;
49 /*---------------------------------------------------------------------------*\
50                         Class sha1streambuf Declaration
51 \*---------------------------------------------------------------------------*/
53 //- A streambuf class for calculating SHA1 digests
54 class sha1streambuf
56     public std::streambuf
58     // Private data
60     //- This does all the work and has its own buffering
61     SHA1 sha1_;
63     friend class osha1stream;
65 public:
67     // Constructors
69         //- Construct null
70         sha1streambuf()
71         {}
73     // Member Functions
75     // Write
77         //- Process unbuffered
78         virtual std::streamsize xsputn(const char* str, std::streamsize n)
79         {
80             sha1_.append(str, n);
81             return n;
82         }
86 /*---------------------------------------------------------------------------*\
87                          Class osha1stream Declaration
88 \*---------------------------------------------------------------------------*/
90 //- A basic output stream for calculating SHA1 digests
91 class osha1stream
93     virtual public std::ios,
94     public std::ostream
96     // Private data
98     sha1streambuf sbuf_;
100 public:
102     // Constructors
104         //- Construct null
105         osha1stream()
106         :
107             std::ostream(&sbuf_)
108         {}
110     // Member Functions
112     // Access
114         //- This hides both signatures of std::basic_ios::rdbuf()
115         sha1streambuf* rdbuf()
116         {
117             return &sbuf_;
118         }
120         //- Full access to the sha1
121         SHA1& sha1()
122         {
123             return sbuf_.sha1_;
124         }
129 /*---------------------------------------------------------------------------*\
130                          Class OSHA1stream Declaration
131 \*---------------------------------------------------------------------------*/
133 //- The output stream for calculating SHA1 digests
134 class OSHA1stream
136     public OSstream
139     // Private Member Functions
141         //- Disallow default bitwise copy construct
142         OSHA1stream(const OSHA1stream&);
144         //- Disallow default bitwise assignment
145         void operator=(const OSHA1stream&);
147 public:
149     // Constructors
151         //- Construct and set stream status
152         OSHA1stream
153         (
154             streamFormat format=ASCII,
155             versionNumber version=currentVersion
156         )
157         :
158             OSstream
159             (
160                 *(new osha1stream),
161                 "OSHA1stream.sinkFile_",
162                 format,
163                 version
164             )
165         {}
168     //- Destructor
169     ~OSHA1stream()
170     {
171         delete &dynamic_cast<osha1stream&>(stdStream());
172     }
175     // Member functions
177     // Access
179         //- Full access to the sha1
180         Foam::SHA1& sha1()
181         {
182             return dynamic_cast<osha1stream&>(stdStream()).sha1();
183         }
185         //- Return SHA1::Digest for the data processed until now
186         Foam::SHA1Digest digest()
187         {
188             return sha1().digest();
189         }
191     // Edit
193         //- Clear the SHA1 calculation
194         void rewind()
195         {
196             sha1().clear();
197         }
202 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
204 } // End namespace Foam
206 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
208 #endif
210 // ************************************************************************* //