#include "ehs/io/audio/AudioCodec.h" namespace ehs { AudioCodec::AudioCodec() : hashExt(0), endianness(Endianness::LE), encodeCb(nullptr), decodeCb(nullptr) { } AudioCodec::AudioCodec(Str_8 id, Str_8 ext, const Endianness end, bool (* encodeCb)(const AudioCodec* const, Serializer&, const Audio*), bool (* decodeCb)(const AudioCodec* const, Serializer&, Audio*)) : id(std::move(id)), hashExt(ext.Hash_64()), ext(std::move(ext)), endianness(end), encodeCb(encodeCb), decodeCb(decodeCb) { } AudioCodec::AudioCodec(AudioCodec&& codec) noexcept : id(std::move(codec.id)), hashExt(codec.hashExt), ext(std::move(codec.ext)), endianness(codec.endianness), encodeCb(codec.encodeCb), decodeCb(codec.decodeCb) { codec.hashExt = 0; codec.endianness = Endianness::LE; codec.encodeCb = nullptr; codec.decodeCb = nullptr; } AudioCodec::AudioCodec(const AudioCodec& codec) : id(codec.id), hashExt(codec.hashExt), ext(codec.ext), endianness(codec.endianness), encodeCb(codec.encodeCb), decodeCb(codec.decodeCb) { } AudioCodec& AudioCodec::operator=(AudioCodec&& codec) noexcept { if (this == &codec) return *this; id = std::move(codec.id); hashExt = codec.hashExt; ext = std::move(codec.ext); endianness = codec.endianness; encodeCb = codec.encodeCb; decodeCb = codec.decodeCb; codec.hashExt = 0; codec.endianness = Endianness::LE; codec.encodeCb = nullptr; codec.decodeCb = nullptr; return *this; } AudioCodec& AudioCodec::operator=(const AudioCodec& codec) { if (this == &codec) return *this; id = codec.id; hashExt = codec.hashExt; ext = codec.ext; endianness = codec.endianness; encodeCb = codec.encodeCb; decodeCb = codec.decodeCb; return *this; } Str_8 AudioCodec::GetId() const { return id; } UInt_64 AudioCodec::GetHashExt() const { return hashExt; } Str_8 AudioCodec::GetExt() const { return ext; } Endianness AudioCodec::GetEndianness() const { return endianness; } bool AudioCodec::Encode(Serializer& out, const Audio* in) const { if (!encodeCb) { EHS_LOG_INT("Error", 0, "Encoding is not supported for the " + id + " format."); return false; } return encodeCb(this, out, in); } bool AudioCodec::Decode(Serializer& in, Audio* out) const { if (!decodeCb) { EHS_LOG_INT("Error", 0, "Decoding is not supported for the " + id + " format."); return false; } return decodeCb(this, in, out); } }