⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 light1d.h

📁 MTL C++ Numeric Library
💻 H
字号:
//// Copyright 1997, 1998, 1999 University of Notre Dame.// Authors: Andrew Lumsdaine, Jeremy G. Siek, Lie-Quan Lee//// This file is part of the Matrix Template Library//// You should have received a copy of the License Agreement for the// Matrix Template Library along with the software;  see the// file LICENSE.  If not, contact Office of Research, University of Notre// Dame, Notre Dame, IN  46556.//// Permission to modify the code and to distribute modified code is// granted, provided the text of this NOTICE is retained, a notice that// the code was modified is included with the above COPYRIGHT NOTICE and// with the COPYRIGHT NOTICE in the LICENSE file, and that the LICENSE// file is distributed with the modified code.//// LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED.// By way of example, but not limitation, Licensor MAKES NO// REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY// PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE COMPONENTS// OR DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS// OR OTHER RIGHTS.//#ifndef MTL_LIGHT1D_H#define MTL_LIGHT1D_H#include "mtl/mtl_iterator.h"#include "mtl/mtl_config.h"#include "mtl/dense_iterator.h"#include "mtl/reverse_iter.h"#include "mtl/matrix_traits.h"#include "mtl/scaled1D.h"#include <stdlib.h>namespace mtl {/**  This is a {\em light} version of {\tt dense1D}.  It does no memory management (or reference counting)  and can only be used with pre-existing memory.  The purpose of {\tt light1D} is to be used  in the high performance kernels.  @memo Light 1-D Container */template <class T, int NN = 0, int IND_OFFSET = 0>class light1D {  typedef light1D self;public:  enum { N = NN };  typedef light1D<int> IndexArray; /* JGS */  /**@name Type Definitions */  //@{  ///  typedef dense_tag sparsity;  ///  typedef scaled1D< light1D<T> > scaled_type;  ///  typedef T value_type;  ///  typedef T& reference;  ///  typedef T* pointer;  ///  typedef const T& const_reference;#if defined(_MSVCPP_)  ///  typedef dense_iterator<T, 0, IND_OFFSET> iterator;  ///  typedef dense_iterator<T, 1, IND_OFFSET> const_iterator;#else  ///  typedef dense_iterator<T*, IND_OFFSET> iterator;  ///  typedef dense_iterator<const T*, IND_OFFSET> const_iterator;#endif  ///  typedef reverse_iter<iterator> reverse_iterator;  ///  typedef reverse_iter<const_iterator> const_reverse_iterator;  typedef size_t size_type;  typedef ptrdiff_t difference_type;  typedef self IndexArrayRef;    typedef self subrange_type;  typedef oned_tag dimension;  //@}  /**@name Constructors */  //@{  /// Default Constructor  inline light1D() : rep(0), size_(0), first(0) { }  /// Preallocated Memory Constructor with optional non-zero starting index  inline light1D(T* data, size_type n, size_type start = 0)    : rep(data), size_(n), first(start) { }  /// Copy Constructor  inline light1D(const self& x)    : rep(x.rep), size_(x.size_), first(x.first) { }  inline ~light1D() { }  //@}  /**@name Access Methods */  //@{  /**@name Iterator Access Methods */  //@{  ///  inline iterator begin() { return iterator(rep, 0, first); }  ///  inline iterator end() { return iterator(rep, size_, first); }  ///  inline const_iterator begin() const {    return const_iterator(rep, 0, first);   }  ///  inline const_iterator end() const{     return const_iterator(rep, size_, first);   }  ///  inline reverse_iterator rbegin() {        return reverse_iterator(end());  }  ///  inline reverse_iterator rend() { return reverse_iterator(begin()); }  ///  inline const_reverse_iterator rbegin() const {    return const_reverse_iterator(end());   }  ///  inline const_reverse_iterator rend() const{     return const_reverse_iterator(begin());   }  //@}  /**@name Element Access Methods */  //@{  ///  inline reference operator[](size_type n) { return rep[n - first]; }  ///  inline const_reference operator[](size_type n) const {     return rep[n - first];   }  inline subrange_type operator()(size_type s, size_type f) const {    return subrange_type(rep + s - first, f - s, 0);  }  //@}  /**@name Size Methods */  //@{    ///  inline int size() const { return size_; }  ///  inline int nnz() const { return size_; }  ///  inline void resize(int n) {    if (rep) delete [] rep;    size_ = n;    rep = new T[size_];  }  inline self& adjust_index(size_type delta) {    first += delta;    return *this;  }  /// Memory Access  inline T* data() const { return rep; }protected:  T* rep;  int size_;  int first;};} /* namespace mtl */#endif // MTL_LIGHT1D_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -