| /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */ |
| /* |
| * Copyright (c) 2013, Regents of the University of California |
| * Alexander Afanasyev |
| * |
| * BSD license, See the LICENSE file for more information |
| * |
| * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu> |
| */ |
| |
| #ifndef NDN_DATA_H |
| #define NDN_DATA_H |
| |
| #include "ndn-cpp/fields/name.h" |
| #include "ndn-cpp/fields/content.h" |
| #include "ndn-cpp/fields/signature.h" |
| #include "ndn-cpp/fields/signed-blob.h" |
| |
| namespace ndn { |
| |
| /** |
| * @brief Class implementing abstractions to work with NDN Data packets |
| */ |
| class Data |
| { |
| public: |
| /** |
| * @brief Create an empty Data with empty payload |
| **/ |
| Data (); |
| |
| /** |
| * @brief Destructor |
| */ |
| ~Data (); |
| |
| /** |
| * @brief Set data packet name |
| * @param name name of the data packet |
| * @return reference to self (to allow method chaining) |
| * |
| * In some cases, a direct access to and manipulation of name using getName is more efficient |
| */ |
| inline Data & |
| setName (const Name &name); |
| |
| /** |
| * @brief Get data packet name (const reference) |
| * @returns name of the data packet |
| */ |
| inline const Name & |
| getName () const; |
| |
| /** |
| * @brief Get data packet name (reference) |
| * @returns name of the data packet |
| */ |
| inline Name & |
| getName (); |
| |
| /** |
| * @brief Get const smart pointer to signature object |
| */ |
| inline ptr_lib::shared_ptr<const Signature> |
| getSignature () const; |
| |
| /** |
| * @brief Get smart pointer to signature object |
| */ |
| inline ptr_lib::shared_ptr<Signature> |
| getSignature (); |
| |
| /** |
| * @brief Set signature object |
| * @param signature smart pointer to a signature object |
| */ |
| inline void |
| setSignature (ptr_lib::shared_ptr<Signature> sigature); |
| |
| /** |
| * @brief Get const reference to content object (content info + actual content) |
| */ |
| inline const Content & |
| getContent () const; |
| |
| /** |
| * @brief Get reference to content object (content info + actual content) |
| */ |
| inline Content & |
| getContent (); |
| |
| /** |
| * @brief Set content object (content info + actual content) |
| * @param content reference to a content object |
| * |
| * More efficient way (that avoids copying): |
| * @code |
| * Content content (...); |
| * getContent ().swap (content); |
| * @endcode |
| */ |
| inline void |
| setContent (const Content &content); |
| |
| /** |
| * @brief A helper method to directly access actual content data (const reference) |
| * |
| * This method is equivalent to |
| * @code |
| * getContent ().getContent () |
| * @endcode |
| */ |
| inline const Blob & |
| content () const; |
| |
| /** |
| * @brief A helper method to directly access actual content data (reference) |
| * |
| * This method is equivalent to |
| * @code |
| * getContent ().getContent () |
| * @endcode |
| */ |
| inline Blob & |
| content (); |
| |
| private: |
| Name m_name; |
| ptr_lib::shared_ptr<Signature> m_signature; // signature with its parameters "binds" name and content |
| Content m_content; |
| |
| ptr_lib::shared_ptr<SignedBlob> m_wire; |
| }; |
| |
| inline Data & |
| Data::setName (const Name &name) |
| { |
| m_name = name; |
| return *this; |
| } |
| |
| inline const Name & |
| Data::getName () const |
| { |
| return m_name; |
| } |
| |
| inline Name & |
| Data::getName () |
| { |
| return m_name; |
| } |
| |
| inline ptr_lib::shared_ptr<const Signature> |
| Data::getSignature () const |
| { |
| return m_signature; |
| } |
| |
| inline ptr_lib::shared_ptr<Signature> |
| Data::getSignature () |
| { |
| return m_signature; |
| } |
| |
| inline void |
| Data::setSignature (ptr_lib::shared_ptr<Signature> signature) |
| { |
| m_signature = signature; |
| } |
| |
| inline const Content & |
| Data::getContent () const |
| { |
| return m_content; |
| } |
| |
| inline Content & |
| Data::getContent () |
| { |
| return m_content; |
| } |
| |
| inline void |
| Data::setContent (const Content &content) |
| { |
| m_content = content; |
| } |
| |
| inline const Blob & |
| Data::content () const |
| { |
| return getContent ().getContent (); |
| } |
| |
| inline Blob & |
| Data::content () |
| { |
| return getContent ().getContent (); |
| } |
| |
| } // namespace ndn |
| |
| #endif // NDN_DATA_H |