iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FrameRange.H
Go to the documentation of this file.
1 /*! @file
2  @author Randolph Voorhies
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 
36 #ifndef INCLUDE_NRT_CORE_IMAGE_FRAMERANGE_H
37 #define INCLUDE_NRT_CORE_IMAGE_FRAMERANGE_H
38 
39 #include <iostream>
40 #include <nrt/External/cereal/access.hpp>
41 
42 namespace nrt
43 {
44  //! A simple struct to hold a range of frames indicating the bounds of a movie
45  /*! \ingroup imagerel */
46  struct FrameRange
47  {
48  enum RangeBound { Max };
49 
50  //! Create a FrameRange with first=0, step=1, last=max of size_t
51  FrameRange();
52  FrameRange(size_t first, size_t last);
53  FrameRange(size_t first, size_t step, size_t last);
54  FrameRange(size_t first, RangeBound last);
55  FrameRange(size_t first, size_t step, RangeBound last);
56 
57  size_t first; //!< The first frame number
58  size_t step; //!< The number of frames to skip
59  size_t last; //!< The last frame number
60 
61  //! Determine whether this framerange contains the given frame number
62  bool const contains(size_t framenumber) const;
63 
64  //! Returns the intersection of this FrameRange and another.
65  /*! The returned FrameRange will have a step that is the maximum of this step and other's step. */
66  FrameRange const intersection(FrameRange const& other) const;
67 
68  private:
69  //! Serialization
70  template <class Archive> inline
71  void serialize(Archive & ar)
72  {
73  ar( first, step, last );
74  }
75  friend class cereal::access;
76  };
77 
78  //! Output a FrameRange to stream
79  /*! \relates FrameRange */
80  std::ostream& operator<<(std::ostream & out, nrt::FrameRange const & range);
81 
82  //! Input a FrameRange from stream
83  /*! \relates FrameRange */
84  std::istream& operator>>(std::istream & stream, nrt::FrameRange & range);
85 }
86 
87 #endif // INCLUDE_NRT_CORE_IMAGE_FRAMERANGE_H
88