Files
geant4/source/global/management/include/G4strstreambuf.hh
T
2016-06-08 15:34:16 +02:00

96 lines
2.2 KiB
C++

// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4strstreambuf.hh,v 1.6 1999/12/16 08:15:57 gunter Exp $
// GEANT4 tag $Name: geant4-01-01 $
//
//
// ---------------------------------------------------------------
// GEANT 4 class header file
//
// G4strstrambuf.hh
//
// ---------------------------------------------------------------
#ifndef G4STRSTREAM_HH
#define G4STRSTREAM_HH
#include "g4std/strstream"
#include "globals.hh"
#include "G4coutDestination.hh"
class G4strstreambuf;
extern G4strstreambuf G4coutbuf;
extern G4strstreambuf G4cerrbuf;
class G4strstreambuf : public G4std::streambuf {
public:
G4strstreambuf() {
destination = NULL;
count = 0;
size = 4095;
buffer = new char[size+1];
}
~G4strstreambuf() {
delete buffer;
}
void SetDestination(G4coutDestination * value) {
destination = value;
}
int overflow(int c=EOF) {
int result = 0;
if(count>=size) {
buffer[count] = '\0';
count = 0;
result = ReceiveString ();
}
buffer[count] = c;
count++;
if(c=='\n') {
buffer[count] = '\0';
count = 0;
result = ReceiveString ();
}
return result;
}
int sync() {
buffer[count] = '\0';
count = 0;
return ReceiveString ();
}
#ifdef WIN32
int underflow() {
return 0;
}
#endif
int ReceiveString () {
G4String stringToSend = buffer;
int result;
if(this == & G4coutbuf && destination != NULL) {
result = destination->ReceiveG4cout(stringToSend);
} else if(this == & G4cerrbuf && destination != NULL) {
result = destination->ReceiveG4cerr(stringToSend);
} else if(this == & G4coutbuf && destination == NULL) {
G4std::cout << stringToSend << G4std::flush;
result =0;
} else if(this == & G4cerrbuf && destination == NULL) {
G4std::cerr << stringToSend << G4std::flush;
result =0;
}
return result;
};
private:
G4coutDestination * destination;
char* buffer;
int count,size;
};
#endif