/*
-Copyright (c) 2005, John Hurst
+Copyright (c) 2005-2006, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
+/*! \file KLV.h
+ \version $Id$
+ \brief KLV objects
+*/
#ifndef _KLV_H_
#define _KLV_H_
-#include <FileIO.h>
-#include <MemIO.h>
+#include "FileIO.h"
+#include "MemIO.h"
+#include "MDD.h"
+
namespace ASDCP
{
{
public:
virtual ~IArchive() {}
- virtual Result_t ReadFrom(ASDCP::MemIOReader& Reader) = 0;
- virtual Result_t WriteTo(ASDCP::MemIOWriter& Writer) = 0;
+ virtual Result_t Unarchive(ASDCP::MemIOReader& Reader) = 0;
+ virtual bool HasValue() const = 0;
+ virtual Result_t Archive(ASDCP::MemIOWriter& Writer) const = 0;
};
} // namespace ASDCP
namespace ASDCP
{
- //
- class IPrimerLookup
- {
- public:
- virtual ~IPrimerLookup() {}
- virtual void ClearTagList() = 0;
- virtual Result_t InsertTag(const ASDCP::UL& Key, ASDCP::TagValue& Tag) = 0;
- virtual Result_t TagForKey(const ASDCP::UL& Key, ASDCP::TagValue& Tag) = 0;
- };
-
//
struct MDDEntry
{
TagValue tag;
bool optional;
const char* name;
- const char* detail;
};
//
- const MDDEntry* GetMDDEntry(const byte_t*);
+ class Dict
+ {
+ public:
+ static const MDDEntry* FindUL(const byte_t*);
+ static const MDDEntry* FindName(const char*);
+ static const MDDEntry& Type(MDD_t type_id);
+ static bool Replace(const MDDEntry& Entry);
+ static void Restore(const byte_t* ul);
+ static void RestoreAll();
+
+ inline static const byte_t* ul(MDD_t type_id) {
+ return Type(type_id).ul;
+ }
+
+ private:
+ Dict* m_Dict;
+ ASDCP_NO_COPY_CONSTRUCT(Dict);
+
+ protected:
+ Dict();
+
+ public:
+ ~Dict();
+ };
+
+ //
+ class IPrimerLookup
+ {
+ public:
+ virtual ~IPrimerLookup() {}
+ virtual void ClearTagList() = 0;
+ virtual Result_t InsertTag(const MDDEntry& Entry, ASDCP::TagValue& Tag) = 0;
+ virtual Result_t TagForKey(const ASDCP::UL& Key, ASDCP::TagValue& Tag) = 0;
+ };
//
class KLVPacket