/****************************************************************************** 
** Copyright (c) 2007 MAK Technologies, Inc. 
** All rights reserved. 
******************************************************************************/ 

//! \file DtPropTypesRecord.h 
//! \brief Record for the prop type  manager
//! \ingroup makArchives

#ifndef DtPropTypesRecord_H_ 
#define DtPropTypesRecord_H_ 

#include <makArchives/makArchives.h>
#include <vector>

namespace makArchives 
{ 
   //! \brief Record of available prop types
   //! \ingroup makArchives
   class DT_DLL_MAKARCHIVES DtPropTypesRecord
   { 

   public:

      //! \brief CTOR
      DtPropTypesRecord();

      //! \brief Copy CTOR
      DtPropTypesRecord(const DtPropTypesRecord& orig);

      //! \brief Assignment OP
      DtPropTypesRecord& operator=(const DtPropTypesRecord& orig);

      //! \brief DTOR
      ~DtPropTypesRecord();

      //! \brief List of prop types
      typedef std::vector<std::string> PropTypeList;

      //! Get the prop type list.
      PropTypeList& propTypeList();

      //! Get the prop type list.
      const PropTypeList& propTypeList() const;

      //! Set the prop type list
      void setPropTypeList(const PropTypeList& ptl);

   protected:

      friend class boost::serialization::access;

      //! When the class Archive corresponds to an output archive, the
      //! & operator is defined similar to <<.  Likewise, when the class Archive
      //! is a type of input archive the & operator is defined similar to >>.
      template<class Archive>
      void serialize(Archive & ar, const unsigned int version)
      {
         ar & BOOST_SERIALIZATION_NVP(myPropTypeList);
      }


   protected:

      PropTypeList myPropTypeList;
   }; 
} 

#endif 

