88 lines
2.3 KiB
C++
88 lines
2.3 KiB
C++
|
/* Copyright 2015 The MathWorks, Inc. */
|
||
|
|
||
|
#ifndef MATLAB_DATA_RANGE_HPP_
|
||
|
#define MATLAB_DATA_RANGE_HPP_
|
||
|
|
||
|
#include "detail/publish_util.hpp"
|
||
|
|
||
|
namespace matlab {
|
||
|
namespace data {
|
||
|
|
||
|
template<template<class> class IteratorType, class ElementType>
|
||
|
class Range {
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
* Get the begin of the Range
|
||
|
*
|
||
|
* @return the first element in the range
|
||
|
* @throw none
|
||
|
*/
|
||
|
IteratorType<ElementType>& begin() MW_NOEXCEPT {
|
||
|
return fBegin;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the end of the Range
|
||
|
*
|
||
|
* @return the end of the range
|
||
|
* @throw none
|
||
|
*/
|
||
|
IteratorType<ElementType>& end() MW_NOEXCEPT {
|
||
|
return fEnd;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Range constructor
|
||
|
*
|
||
|
* @param begin - begin for the Range
|
||
|
* @param end - the end of the Range
|
||
|
*
|
||
|
* @return the newly constructed Range
|
||
|
*
|
||
|
* @throw none
|
||
|
*/
|
||
|
Range(IteratorType<ElementType> begin, IteratorType<ElementType> end) MW_NOEXCEPT :
|
||
|
fBegin(std::move(begin)),
|
||
|
fEnd(std::move(end)) {}
|
||
|
|
||
|
/**
|
||
|
* Range move constructor
|
||
|
*
|
||
|
* @param rhs - Range to be moved
|
||
|
*
|
||
|
* @return the newly constructed Range
|
||
|
*
|
||
|
* @throw none
|
||
|
*/
|
||
|
Range(Range&& rhs) MW_NOEXCEPT :
|
||
|
fBegin(std::move(rhs.fBegin)),
|
||
|
fEnd(std::move(rhs.fEnd)) {}
|
||
|
|
||
|
/**
|
||
|
* Range move assignment operator
|
||
|
*
|
||
|
* @param rhs - Range to be moved
|
||
|
*
|
||
|
* @return the updated Range
|
||
|
*
|
||
|
* @throw none
|
||
|
*/
|
||
|
Range& operator=(Range&& rhs) MW_NOEXCEPT {
|
||
|
fBegin = std::move(rhs.fBegin);
|
||
|
fEnd = std::move(rhs.fEnd);
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
IteratorType<ElementType> fBegin;
|
||
|
IteratorType<ElementType> fEnd;
|
||
|
|
||
|
Range& operator=(Range const& rhs) = delete;
|
||
|
Range(const Range &rhs) = delete;
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|