athena/include/Athena/DNA.hpp

77 lines
1.7 KiB
C++
Raw Normal View History

2015-06-15 02:49:02 +00:00
#ifndef DNA_HPP
#define DNA_HPP
2015-06-17 02:50:12 +00:00
/* BIG FAT WARNING!!!
*
* The type-structure of this file is expected to remain consistent for 'atdna'
* Any changes to the types or namespacing must be reflected in 'atdna/main.cpp'
*/
2015-06-16 02:29:53 +00:00
#include "Global.hpp"
#include "IStreamReader.hpp"
#include "IStreamWriter.hpp"
2015-06-15 02:49:02 +00:00
#include <vector>
#include <memory>
2015-06-15 02:49:02 +00:00
namespace Athena
{
namespace io
{
2015-06-16 02:29:53 +00:00
/**
* @brief Base DNA class used against 'atdna'
*
* Athena bundles a build-tool called 'atdna'. This tool functions
2015-06-17 02:50:12 +00:00
* just like the 'clang' compiler, except it emits a full .cpp implementation
* with all read/write calls necessary to marshal the DNA structure to/from
* a streamed medium
2015-06-16 02:29:53 +00:00
*/
2015-06-17 00:25:48 +00:00
template <Endian DNAE>
2015-06-15 02:49:02 +00:00
struct DNA
{
2015-06-16 07:11:56 +00:00
template <typename T, Endian VE = DNAE>
2015-06-16 02:29:53 +00:00
using Value = T;
2015-06-15 02:49:02 +00:00
2015-06-17 00:25:48 +00:00
template <typename T, size_t cntVar, Endian VE = DNAE>
2015-06-16 02:29:53 +00:00
using Vector = std::vector<T>;
2015-06-15 02:49:02 +00:00
template <size_t sizeVar>
using Buffer = std::unique_ptr<atUint8[]>;
template <atInt32 sizeVar = -1>
using String = std::string;
template <atInt32 sizeVar = -1, Endian VE = DNAE>
using WString = std::wstring;
template <atInt32 sizeVar = -1>
using UTF8 = std::string;
template <off_t offset, SeekOrigin direction>
struct Seek {};
template <size_t align>
struct Align {};
2015-06-16 02:29:53 +00:00
virtual void read(IStreamReader&)=0;
virtual void write(IStreamWriter&) const=0;
};
2015-06-15 02:49:02 +00:00
2015-06-17 00:25:48 +00:00
/** Macro to automatically declare read/write methods in subclasses */
#define DECL_DNA \
void read(Athena::io::IStreamReader&); \
void write(Athena::io::IStreamWriter&) const; \
2015-06-20 04:40:15 +00:00
/** Macro to supply count variable to atdna and mute it for other compilers */
#ifdef __clang__
#define DNA_COUNT(cnt) sizeof(cnt)
#else
#define DNA_COUNT(cnt) 0
#endif
2015-06-15 02:49:02 +00:00
}
}
#endif // DNA_HPP