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.
		
		
		
		
		
			
		
			
				
					
					
						
							147 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							147 lines
						
					
					
						
							4.0 KiB
						
					
					
				| //=============================================================================
 | |
| //
 | |
| //  Copyright (c) 2015-2018 Qualcomm Technologies, Inc.
 | |
| //  All Rights Reserved.
 | |
| //  Confidential and Proprietary - Qualcomm Technologies, Inc.
 | |
| //
 | |
| //=============================================================================
 | |
| 
 | |
| #ifndef _ITENSOR_HPP_
 | |
| #define _ITENSOR_HPP_
 | |
| 
 | |
| #include "ITensorItr.hpp"
 | |
| #include "ITensorItrImpl.hpp"
 | |
| #include "TensorShape.hpp"
 | |
| #include "ZdlExportDefine.hpp"
 | |
| #include <memory>
 | |
| #include <vector>
 | |
| #include <ostream>
 | |
| #include <cmath>
 | |
| 
 | |
| namespace zdl {
 | |
| namespace DlSystem
 | |
| {
 | |
|    class ITensor;
 | |
| }}
 | |
| 
 | |
| namespace zdl { namespace DlSystem
 | |
| {
 | |
| /** @addtogroup c_plus_plus_apis C++
 | |
| @{ */
 | |
| 
 | |
| /**
 | |
|  * Represents a tensor which holds n-dimensional data. It is important to
 | |
|  * understand how the tensor data is represented in memory 
 | |
|  * relative to the tensor dimensions. Tensors store data in 
 | |
|  * memory in row-major order (i.e. the last tensor dimension is 
 | |
|  * the fastest varying one). For example, if you have a two 
 | |
|  * dimensional tensor with 3 rows and 2 columns (i.e. the tensor 
 | |
|  * dimensions are 3,2 as returned in tensor dimension vectors)
 | |
|  * with the following data in terms rows and columns: 
 | |
|  *  
 | |
|  * | 1 2 | <br/>
 | |
|  * | 3 4 | <br/>
 | |
|  * | 5 6 | <br/>
 | |
|  *  
 | |
|  * This data would be stored in memory as 1,2,3,4,5,6. 
 | |
|  */
 | |
| class ZDL_EXPORT ITensor 
 | |
| {
 | |
| public:
 | |
| 
 | |
|    typedef zdl::DlSystem::ITensorItr<false> iterator;
 | |
|    typedef zdl::DlSystem::ITensorItr<true> const_iterator;
 | |
| 
 | |
|    virtual ~ITensor() {}
 | |
| 
 | |
|    /**
 | |
|     * Returns a tensor iterator pointing to the beginning 
 | |
|     * of the data in the tensor.
 | |
|     * 
 | |
|     * @return A tensor iterator that points to the first data
 | |
|     *         element in the tensor.
 | |
|     */
 | |
|    virtual iterator begin() = 0;
 | |
| 
 | |
|    /**
 | |
|     * Returns the const version of a tensor iterator 
 | |
|     * pointing to the beginning of the data in the tensor.
 | |
|     * 
 | |
|     * @return A tensor const iterator that points to the first data
 | |
|     *         element in the tensor.
 | |
|     */
 | |
|    virtual const_iterator cbegin() const = 0;
 | |
| 
 | |
|    /**
 | |
|     * Returns a tensor iterator pointing to the end of the
 | |
|     * data in the tensor. This tensor should not be
 | |
|     * dereferenced.
 | |
|     * 
 | |
|     * @return A tensor iterator that points to the end of the data 
 | |
|     *         (one past the last element) in the tensor.
 | |
|     */
 | |
|    virtual iterator end() = 0;
 | |
| 
 | |
|    /**
 | |
|     * Returns the const version of a tensor iterator 
 | |
|     * pointing to the end of the data in the tensor. This
 | |
|     * tensor should not be dereferenced.
 | |
|     * 
 | |
|     * @return A tensor const iterator that points to the end of the
 | |
|     *         data (one past the last element) in the tensor.
 | |
|     */
 | |
|    virtual const_iterator cend() const = 0;
 | |
| 
 | |
|    /**
 | |
|     * @brief Gets the shape of this tensor.
 | |
|     *  
 | |
|     * The last element of the vector represents the fastest varying
 | |
|     * dimension and the zeroth element represents the slowest 
 | |
|     * varying dimension, etc. 
 | |
|     * 
 | |
|     * @return A shape class holding the tensor dimensions.
 | |
|     */
 | |
|    virtual TensorShape getShape() const = 0;
 | |
| 
 | |
|    /**
 | |
|     * Returns the element size of the data in the tensor 
 | |
|     * (discounting strides). This is how big a buffer would
 | |
|     * need to be to hold the tensor data contiguously in
 | |
|     * memory.
 | |
|     *  
 | |
|     * @return The size of the tensor (in elements).
 | |
|     */
 | |
|    virtual size_t getSize() const = 0;
 | |
| 
 | |
|    /**
 | |
|     * @brief Serializes the tensor to an output stream.
 | |
|     * 
 | |
|     * @param[in] output The output stream to which to write the tensor 
 | |
|     *  
 | |
|     * @throw std::runtime_error If the stream is ever in a bad 
 | |
|     *        state before the tensor is fully serialized.
 | |
|     */
 | |
|    virtual void serialize(std::ostream &output) const = 0;
 | |
| 
 | |
|    friend iterator;
 | |
|    friend const_iterator;
 | |
| 
 | |
|    virtual bool isQuantized() {return false;}
 | |
|    virtual float GetDelta() {return NAN;};
 | |
|    virtual float GetOffset() {return NAN;};
 | |
| 
 | |
| protected:
 | |
| 
 | |
|    /**
 | |
|     * Returns the tensor iterator implementation.
 | |
|     * 
 | |
|     * @return A pointer to the tensor iterator implementation.
 | |
|     */
 | |
|    virtual std::unique_ptr<::DlSystem::ITensorItrImpl> getItrImpl() const = 0;
 | |
| };
 | |
| 
 | |
| }}
 | |
| 
 | |
| /** @} */ /* end_addtogroup c_plus_plus_apis C++ */
 | |
| 
 | |
| #endif
 | |
| 
 |