BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / OpenFOAM / db / IOstreams / Pstreams / UOPstream.H
blob5cbde9aee5bf7ff8e896a0af5ac46e34d8e9bde7
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::UOPstream
27 Description
28     Output inter-processor communications stream operating on external
29     buffer.
31 SourceFiles
32     UOPstream.C
34 \*---------------------------------------------------------------------------*/
36 #include "Pstream.H"
38 #ifndef UOPstream_H
39 #define UOPstream_H
41 #include "UPstream.H"
42 #include "Ostream.H"
43 #include "DynamicList.H"
44 #include "PstreamBuffers.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 namespace Foam
51 /*---------------------------------------------------------------------------*\
52                           Class UOPstream Declaration
53 \*---------------------------------------------------------------------------*/
55 class UOPstream
57     public UPstream,
58     public Ostream
60     // Private data
62         int toProcNo_;
64         DynamicList<char>& sendBuf_;
66         const int tag_;
68         const bool sendAtDestruct_;
71     // Private Member Functions
73         //- Write a T to the transfer buffer
74         template<class T>
75         inline void writeToBuffer(const T&);
77         //- Write a char to the transfer buffer
78         inline void writeToBuffer(const char&);
80         //- Write data to the transfer buffer
81         inline void writeToBuffer(const void* data, size_t count, size_t align);
84 public:
86     // Constructors
88         //- Construct given process index to send to and optional buffer size,
89         //  write format and IO version
90         UOPstream
91         (
92             const commsTypes commsType,
93             const int toProcNo,
94             DynamicList<char>& sendBuf,
95             const int tag = UPstream::msgType(),
96             const bool sendAtDestruct = true,
97             streamFormat format=BINARY,
98             versionNumber version=currentVersion
99         );
101         //- Construct given buffers
102         UOPstream(const int toProcNo, PstreamBuffers&);
105     //- Destructor
106     ~UOPstream();
109     // Member functions
111         // Inquiry
113             //- Return flags of output stream
114             ios_base::fmtflags flags() const
115             {
116                 return ios_base::fmtflags(0);
117             }
120         // Write functions
122             //- Write given buffer to given processor
123             static bool write
124             (
125                 const commsTypes commsType,
126                 const int toProcNo,
127                 const char* buf,
128                 const std::streamsize bufSize,
129                 const int tag = UPstream::msgType()
130             );
132             //- Write next token to stream
133             Ostream& write(const token&);
135             //- Write character
136             Ostream& write(const char);
138             //- Write character string
139             Ostream& write(const char*);
141             //- Write word
142             Ostream& write(const word&);
144             //- Write string
145             Ostream& write(const string&);
147             //- Write std::string surrounded by quotes.
148             //  Optional write without quotes.
149             Ostream& writeQuoted
150             (
151                 const std::string&,
152                 const bool quoted=true
153             );
155             //- Write label
156             Ostream& write(const label);
158             //- Write floatScalar
159             Ostream& write(const floatScalar);
161             //- Write doubleScalar
162             Ostream& write(const doubleScalar);
164             //- Write binary block
165             Ostream& write(const char*, std::streamsize);
167             //- Add indentation characters
168             void indent()
169             {}
172         // Stream state functions
174             //- Flush stream
175             void flush()
176             {}
178             //- Add newline and flush stream
179             void endl()
180             {}
182             //- Get width of output field
183             int width() const
184             {
185                 return 0;
186             }
188             //- Set width of output field (and return old width)
189             int width(const int)
190             {
191                  return 0;
192             }
194             //- Get precision of output field
195             int precision() const
196             {
197                  return 0;
198             }
200             //- Set precision of output field (and return old precision)
201             int precision(const int)
202             {
203                  return 0;
204             }
207         // Edit
209             //- Set flags of stream
210             ios_base::fmtflags flags(const ios_base::fmtflags)
211             {
212                 return ios_base::fmtflags(0);
213             }
216         // Print
218             //- Print description of IOstream to Ostream
219             void print(Ostream&) const;
223 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
225 } // End namespace Foam
227 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
229 #endif
231 // ************************************************************************* //