/*
|
/*
|
* Copyright (c) 2016 by Alex I. Kuznetsov.
|
* Copyright (c) 2016 by Alex I. Kuznetsov.
|
*
|
*
|
* Part of the LXP32 CPU IP core.
|
* Part of the LXP32 CPU IP core.
|
*
|
*
|
* This module defines the OutputWriter abstract class and its
|
* This module defines the OutputWriter abstract class and its
|
* derived classes. These classes are used to write LXP32 executable
|
* derived classes. These classes are used to write LXP32 executable
|
* code in different formats.
|
* code in different formats.
|
*/
|
*/
|
|
|
#ifndef OUTPUTWRITER_H_INCLUDED
|
#ifndef OUTPUTWRITER_H_INCLUDED
|
#define OUTPUTWRITER_H_INCLUDED
|
#define OUTPUTWRITER_H_INCLUDED
|
|
|
#include <fstream>
|
#include <fstream>
|
#include <string>
|
#include <string>
|
|
|
/*
|
/*
|
* An abstract base class for all writers
|
* An abstract base class for all writers
|
*/
|
*/
|
|
|
class OutputWriter {
|
class OutputWriter {
|
std::size_t _size=0;
|
std::size_t _size=0;
|
public:
|
public:
|
virtual ~OutputWriter() {}
|
virtual ~OutputWriter() {}
|
virtual void write(const char *data,std::size_t n);
|
virtual void write(const char *data,std::size_t n);
|
virtual void abort() {}
|
virtual void abort() {}
|
void pad(std::size_t size);
|
void pad(std::size_t size);
|
std::size_t size() const;
|
std::size_t size() const;
|
protected:
|
protected:
|
virtual void writeData(const char *data,std::size_t n)=0;
|
virtual void writeData(const char *data,std::size_t n)=0;
|
};
|
};
|
|
|
/*
|
/*
|
* Write a regular binary file
|
* Write a regular binary file
|
*/
|
*/
|
|
|
class BinaryOutputWriter : public OutputWriter {
|
class BinaryOutputWriter : public OutputWriter {
|
std::string _filename;
|
std::string _filename;
|
std::ofstream _os;
|
std::ofstream _os;
|
public:
|
public:
|
BinaryOutputWriter(const std::string &filename);
|
BinaryOutputWriter(const std::string &filename);
|
virtual void abort() override;
|
virtual void abort() override;
|
protected:
|
protected:
|
virtual void writeData(const char *data,std::size_t n) override;
|
virtual void writeData(const char *data,std::size_t n) override;
|
};
|
};
|
|
|
/*
|
/*
|
* Write a text file (one word per line)
|
* Write a text file (one word per line)
|
*/
|
*/
|
|
|
class TextOutputWriter : public OutputWriter {
|
class TextOutputWriter : public OutputWriter {
|
public:
|
public:
|
enum Format {Bin,Dec,Hex};
|
enum Format {Bin,Dec,Hex};
|
private:
|
private:
|
std::string _filename;
|
std::string _filename;
|
std::ofstream _os;
|
std::ofstream _os;
|
std::string _buf;
|
std::string _buf;
|
Format _fmt;
|
Format _fmt;
|
public:
|
public:
|
TextOutputWriter(const std::string &filename,Format f);
|
TextOutputWriter(const std::string &filename,Format f);
|
~TextOutputWriter();
|
~TextOutputWriter();
|
virtual void abort() override;
|
virtual void abort() override;
|
protected:
|
protected:
|
virtual void writeData(const char *data,std::size_t n) override;
|
virtual void writeData(const char *data,std::size_t n) override;
|
};
|
};
|
|
|
#endif
|
#endif
|
|
|