You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							191 lines
						
					
					
						
							5.4 KiB
						
					
					
				
			
		
		
	
	
							191 lines
						
					
					
						
							5.4 KiB
						
					
					
				//=============================================================================
 | 
						|
//
 | 
						|
//  Copyright (c) 2015-2020 Qualcomm Technologies, Inc.
 | 
						|
//  All Rights Reserved.
 | 
						|
//  Confidential and Proprietary - Qualcomm Technologies, Inc.
 | 
						|
//
 | 
						|
//=============================================================================
 | 
						|
 | 
						|
#ifndef ZEROTH_IDNC_CONTAINER_HPP
 | 
						|
#define ZEROTH_IDNC_CONTAINER_HPP
 | 
						|
 | 
						|
#include <memory>
 | 
						|
#include <stdint.h>
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
#include <set>
 | 
						|
 | 
						|
#include "DlSystem/ZdlExportDefine.hpp"
 | 
						|
#include "DlSystem/String.hpp"
 | 
						|
 | 
						|
namespace zdl {
 | 
						|
namespace DlContainer {
 | 
						|
 | 
						|
/** @addtogroup c_plus_plus_apis C++
 | 
						|
@{ */
 | 
						|
 | 
						|
class IDlContainer;
 | 
						|
class dlc_error;
 | 
						|
 | 
						|
/**
 | 
						|
 * The structure of a record in a DL container.
 | 
						|
 */
 | 
						|
struct ZDL_EXPORT DlcRecord
 | 
						|
{
 | 
						|
   /// Name of the record.
 | 
						|
   std::string name;
 | 
						|
   /// Byte blob holding the data for the record.
 | 
						|
   std::vector<uint8_t> data;
 | 
						|
 | 
						|
   DlcRecord();
 | 
						|
   DlcRecord( DlcRecord&& other )
 | 
						|
      : name(std::move(other.name))
 | 
						|
      , data(std::move(other.data))
 | 
						|
   {}
 | 
						|
   DlcRecord(const std::string& new_name)
 | 
						|
      : name(new_name)
 | 
						|
      , data()
 | 
						|
   {
 | 
						|
      if(name.empty())
 | 
						|
      {
 | 
						|
         name.reserve(1);
 | 
						|
      }
 | 
						|
   }
 | 
						|
   DlcRecord(const DlcRecord&) = delete;
 | 
						|
};
 | 
						|
 | 
						|
// The maximum length of any record name.
 | 
						|
extern const uint32_t RECORD_NAME_MAX_SIZE;
 | 
						|
// The maximum size of the record payload (bytes).
 | 
						|
extern const uint32_t RECORD_DATA_MAX_SIZE;
 | 
						|
// The maximum number of records in an archive at one time.
 | 
						|
extern const uint32_t ARCHIVE_MAX_RECORDS;
 | 
						|
 | 
						|
/**
 | 
						|
 * Represents a container for a neural network model which can
 | 
						|
 * be used to load the model into the SNPE runtime.
 | 
						|
 */
 | 
						|
class ZDL_EXPORT IDlContainer
 | 
						|
{
 | 
						|
public:
 | 
						|
   /**
 | 
						|
    * Initializes a container from a container archive file.
 | 
						|
    *
 | 
						|
    * @param[in] filename Container archive file path.
 | 
						|
    *
 | 
						|
    * @return A pointer to the initialized container
 | 
						|
    */
 | 
						|
   static std::unique_ptr<IDlContainer>
 | 
						|
   open(const std::string &filename) noexcept;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Initializes a container from a container archive file.
 | 
						|
    *
 | 
						|
    * @param[in] filename Container archive file path.
 | 
						|
    *
 | 
						|
    * @return A pointer to the initialized container
 | 
						|
    */
 | 
						|
   static std::unique_ptr<IDlContainer>
 | 
						|
   open(const zdl::DlSystem::String &filename) noexcept;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Initializes a container from a byte buffer.
 | 
						|
    *
 | 
						|
    * @param[in] buffer Byte buffer holding the contents of an archive
 | 
						|
    *                   file.
 | 
						|
    *
 | 
						|
    * @return A pointer to the initialized container
 | 
						|
    */
 | 
						|
   static std::unique_ptr<IDlContainer>
 | 
						|
   open(const std::vector<uint8_t> &buffer) noexcept;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Initializes a container from a byte buffer.
 | 
						|
    *
 | 
						|
    * @param[in] buffer Byte buffer holding the contents of an archive
 | 
						|
    *                   file.
 | 
						|
    *
 | 
						|
    * @param[in] size Size of the byte buffer.
 | 
						|
    *
 | 
						|
    * @return A pointer to the initialized container
 | 
						|
    */
 | 
						|
   static std::unique_ptr<IDlContainer>
 | 
						|
   open(const uint8_t* buffer, const size_t size) noexcept;
 | 
						|
 | 
						|
 | 
						|
/** @} */ /* end_addtogroup c_plus_plus_apis C++ */
 | 
						|
 | 
						|
   /**
 | 
						|
    * Get the record catalog for a container.
 | 
						|
    *
 | 
						|
    * @param[out] catalog Buffer that will hold the record names on
 | 
						|
    *                    return.
 | 
						|
    */
 | 
						|
   virtual void getCatalog(std::set<std::string> &catalog) const = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the record catalog for a container.
 | 
						|
     *
 | 
						|
     * @param[out] catalog Buffer that will hold the record names on
 | 
						|
     *                    return.
 | 
						|
     */
 | 
						|
   virtual void getCatalog(std::set<zdl::DlSystem::String> &catalog) const = 0;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Get a record from a container by name.
 | 
						|
    *
 | 
						|
    * @param[in] name Name of the record to fetch.
 | 
						|
    * @param[out] record The passed in record will be populated with the
 | 
						|
    *                   record data on return. Note that the caller
 | 
						|
    *                   will own the data in the record and is
 | 
						|
    *                   responsible for freeing it if needed.
 | 
						|
    */
 | 
						|
   virtual void getRecord(const std::string &name, DlcRecord &record) const = 0;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Get a record from a container by name.
 | 
						|
    *
 | 
						|
    * @param[in] name Name of the record to fetch.
 | 
						|
    * @param[out] record The passed in record will be populated with the
 | 
						|
    *                   record data on return. Note that the caller
 | 
						|
    *                   will own the data in the record and is
 | 
						|
    *                   responsible for freeing it if needed.
 | 
						|
    */
 | 
						|
   virtual void getRecord(const zdl::DlSystem::String &name, DlcRecord &record) const = 0;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Save the container to an archive on disk. This function will save the
 | 
						|
    * container if the filename is different from the file that it was opened
 | 
						|
    * from, or if at least one record was modified since the container was
 | 
						|
    * opened.
 | 
						|
    *
 | 
						|
    * It will truncate any existing file at the target path.
 | 
						|
    *
 | 
						|
    * @param filename Container archive file path.
 | 
						|
    *
 | 
						|
    * @return indication of success/failure
 | 
						|
    */
 | 
						|
   virtual bool save(const std::string &filename) = 0;
 | 
						|
 | 
						|
   /**
 | 
						|
    * Save the container to an archive on disk. This function will save the
 | 
						|
    * container if the filename is different from the file that it was opened
 | 
						|
    * from, or if at least one record was modified since the container was
 | 
						|
    * opened.
 | 
						|
    *
 | 
						|
    * It will truncate any existing file at the target path.
 | 
						|
    *
 | 
						|
    * @param filename Container archive file path.
 | 
						|
    *
 | 
						|
    * @return indication of success/failure
 | 
						|
    */
 | 
						|
   virtual bool save (const zdl::DlSystem::String &filename) = 0;
 | 
						|
 | 
						|
   virtual ~IDlContainer() {}
 | 
						|
};
 | 
						|
 | 
						|
} // ns DlContainer
 | 
						|
} // ns zdl
 | 
						|
 | 
						|
 | 
						|
#endif
 | 
						|
 |