ViennaCL - The Vienna Computing Library  1.5.2
slice.hpp
Go to the documentation of this file.
1 #ifndef VIENNACL_SLICE_HPP_
2 #define VIENNACL_SLICE_HPP_
3 
4 /* =========================================================================
5  Copyright (c) 2010-2014, Institute for Microelectronics,
6  Institute for Analysis and Scientific Computing,
7  TU Wien.
8  Portions of this software are copyright by UChicago Argonne, LLC.
9 
10  -----------------
11  ViennaCL - The Vienna Computing Library
12  -----------------
13 
14  Project Head: Karl Rupp rupp@iue.tuwien.ac.at
15 
16  (A list of authors and contributors can be found in the PDF manual)
17 
18  License: MIT (X11), see file LICENSE in the base directory
19 ============================================================================= */
20 
25 #include <vector>
26 #include <stddef.h>
27 #include <assert.h>
28 #include "viennacl/forwards.h"
29 
30 namespace viennacl
31 {
32 
37  template <typename SizeType /* see forwards.h for default argument*/,
38  typename DistanceType /* see forwards.h for default argument*/>
39  class basic_slice
40  {
41  public:
42  typedef SizeType size_type;
43  typedef DistanceType difference_type;
47 
48  basic_slice() : start_(0), stride_(1), size_(0) {}
49  basic_slice(size_type start_index,
50  difference_type stride_arg,
51  size_type size_arg) : start_(start_index), stride_(stride_arg), size_(size_arg) {}
52 
53 
54  size_type start() const { return start_; }
55  difference_type stride() const { return stride_; }
56  size_type size() const { return size_; }
57 
59  {
60  assert(i < size());
61  return start_ + i * stride_;
62  }
64 
65  bool operator==(const basic_slice & s) const { return (start_ == s.start_) && (stride_ == s.stride_) && (size_ == s.size_); }
66  bool operator!=(const basic_slice & s) const { return !(*this == s); }
67 
68  private:
69  size_type start_;
70  difference_type stride_;
71  size_type size_;
72  };
73 
74 
75 }
76 
77 #endif
bool operator==(const basic_slice &s) const
Definition: slice.hpp:65
size_type value_type
Definition: slice.hpp:44
size_type size() const
Definition: slice.hpp:56
basic_slice(size_type start_index, difference_type stride_arg, size_type size_arg)
Definition: slice.hpp:49
This file provides the forward declarations for the main types used within ViennaCL.
size_type start() const
Definition: slice.hpp:54
bool operator!=(const basic_slice &s) const
Definition: slice.hpp:66
DistanceType difference_type
Definition: slice.hpp:43
basic_slice()
Definition: slice.hpp:48
const_reference operator()(size_type i) const
Definition: slice.hpp:58
difference_type stride() const
Definition: slice.hpp:55
const_reference reference
Definition: slice.hpp:46
SizeType size_type
Definition: slice.hpp:42
value_type const_reference
Definition: slice.hpp:45
const_reference operator[](size_type i) const
Definition: slice.hpp:63
A slice class that refers to an interval [start, stop), where 'start' is included, and 'stop' is excluded.
Definition: forwards.h:344