cosmotool/src/fortran.hpp

114 lines
2.6 KiB
C++
Raw Normal View History

2009-01-08 16:17:32 +01:00
#ifndef __COSMO_FORTRAN_HPP
#define __COSMO_FORTRAN_HPP
#include <string>
#include <stdint.h>
#include <inttypes.h>
#include <iostream>
#include "config.hpp"
namespace CosmoTool
{
class InvalidUnformattedAccess : public Exception
{
};
class FortranTypes
2009-01-08 16:17:32 +01:00
{
public:
enum Ordering {
LittleEndian, BigEndian
};
enum CheckpointSize {
Check_32bits, Check_64bits
};
};
class UnformattedRead: public FortranTypes
{
public:
2009-01-08 16:17:32 +01:00
UnformattedRead(const std::string& fname)
throw (NoSuchFileException);
2009-01-08 16:17:32 +01:00
UnformattedRead(const char *fname)
throw (NoSuchFileException);
2009-01-08 16:17:32 +01:00
~UnformattedRead();
// Todo implement primitive description
void setOrdering(Ordering o);
void setCheckpointSize(CheckpointSize cs);
void beginCheckpoint()
throw (InvalidUnformattedAccess,EndOfFileException);
2010-04-23 09:31:25 +02:00
void endCheckpoint(bool autodrop = false)
2009-01-08 16:17:32 +01:00
throw (InvalidUnformattedAccess);
double readReal64()
throw (InvalidUnformattedAccess);
float readReal32()
throw (InvalidUnformattedAccess);
int32_t readInt32()
throw (InvalidUnformattedAccess);
int64_t readInt64()
throw (InvalidUnformattedAccess);
2010-04-23 09:31:25 +02:00
void skip(int64_t off)
throw (InvalidUnformattedAccess);
2009-01-08 16:17:32 +01:00
protected:
bool swapOrdering;
CheckpointSize cSize;
uint64_t checkPointRef;
uint64_t checkPointAccum;
std::ifstream *f;
void readOrderedBuffer(void *buffer, int size)
throw (InvalidUnformattedAccess);
};
class UnformattedWrite: public FortranTypes
{
public:
UnformattedWrite(const std::string& fname)
throw (NoSuchFileException);
UnformattedWrite(const char *fname)
throw (NoSuchFileException);
~UnformattedWrite();
// Todo implement primitive description
void setOrdering(Ordering o);
void setCheckpointSize(CheckpointSize cs);
void beginCheckpoint()
throw (FilesystemFullException,InvalidUnformattedAccess);
void endCheckpoint()
throw (FilesystemFullException,InvalidUnformattedAccess);
void writeReal64(double d)
throw (FilesystemFullException);
void writeReal32(float f)
throw (FilesystemFullException);
void writeInt32(int32_t i)
throw (FilesystemFullException);
void writeInt64(int64_t i)
throw (FilesystemFullException);
2012-04-02 00:49:19 +02:00
void writeInt8(int8_t c)
throw (FilesystemFullException);
2012-04-02 00:49:19 +02:00
void writeOrderedBuffer(void *buffer, int size)
throw(FilesystemFullException);
protected:
bool swapOrdering;
CheckpointSize cSize;
std::streamoff checkPointRef;
uint64_t checkPointAccum;
std::ofstream *f;
};
2009-01-08 16:17:32 +01:00
};
#endif