6 #ifndef CNOID_UTIL_MULTI_SEQ_H_INCLUDED
7 #define CNOID_UTIL_MULTI_SEQ_H_INCLUDED
11 #include <boost/multi_array.hpp>
15 template <
typename ElementType,
typename Allocator = std::allocator<ElementType> >
19 typedef boost::shared_ptr< MultiSeq<ElementType, Allocator> >
Ptr;
20 typedef typename boost::multi_array<ElementType, 2, Allocator>
Container;
22 typedef typename Container::template array_view<1>::type
View;
41 virtual void setDimension(
int newNumFrames,
int newNumParts,
bool clearNewElements =
false) {
47 if(newNumFrames > reservedNumFrames){
48 container.resize(boost::extents[newNumFrames][newNumParts]);
50 container.resize(boost::extents[reservedNumFrames][newNumParts]);
56 int i = (prevNumFrames == 0) ? 0 : prevNumParts;
57 while(i < newNumParts){
58 View frames =
part(i++);
61 if(prevNumFrames > 0 && (
numFrames_ > prevNumFrames)){
62 for(
int i=0; i < prevNumParts; ++i){
63 View frames =
part(i);
64 const ElementType& last = frames[prevNumFrames - 1];
65 std::fill(frames.begin() + prevNumFrames, frames.end(), last);
83 virtual void setNumParts(
int newNumParts,
bool clearNewElements =
false) {
95 virtual void setNumFrames(
int newNumFrames,
bool clearNewElements =
false) {
160 template <
typename ArrayType>
inline void appendFrame(
const ArrayType& v) {
163 for(
int i=0; i < m; ++i){
Definition: YamlWriter.h:18
int numFrames_
Definition: MultiSeq.h:174
int numFrames() const
Definition: MultiSeq.h:91
Container::template array_view< 1 >::type View
Definition: MultiSeq.h:22
ElementType & at(int frame, int part)
Definition: MultiSeq.h:130
virtual ~MultiSeq()
Definition: MultiSeq.h:39
virtual void setNumFrames(int newNumFrames, bool clearNewElements=false)
Definition: MultiSeq.h:95
int numParts() const
Definition: MultiSeq.h:103
virtual ElementType defaultValue() const
Definition: MultiSeq.h:177
virtual double getFrameRate() const
Definition: MultiSeq.h:71
virtual bool read(const YamlMapping &archive)
Definition: MultiSeq.h:168
int frameOfTime(double time) const
Definition: MultiSeq.h:118
double timeOfFrame(int frame) const
Definition: MultiSeq.h:122
const std::string & seqType() const
Definition: SeqBase.h:28
MultiSeq(const MultiSeq< ElementType, Allocator > &org)
Definition: MultiSeq.h:32
Container::index_range IndexRange
Definition: MultiSeq.h:21
boost::shared_ptr< MultiSeq< ElementType, Allocator > > Ptr
Definition: MultiSeq.h:19
const ElementType & at(int frame, int part) const
Definition: MultiSeq.h:126
virtual void setNumParts(int newNumParts, bool clearNewElements=false)
Definition: MultiSeq.h:83
double frameRate() const
Definition: MultiSeq.h:75
Container container
Definition: MultiSeq.h:173
double frameRate_
Definition: MultiSeq.h:175
virtual int getNumParts() const
Definition: MultiSeq.h:99
virtual bool write(YamlWriter &writer)
Definition: MultiSeq.h:169
View frame(int index)
Definition: MultiSeq.h:138
Definition: EasyScanner.h:16
Definition: MultiSeq.h:16
virtual bool write(YamlWriter &writer)
Definition: SeqBase.cpp:64
virtual void setFrameRate(double frameRate)
Definition: MultiSeq.h:79
Definition: YamlNodes.h:212
virtual int getNumFrames() const
Definition: MultiSeq.h:87
virtual void setDimension(int newNumFrames, int newNumParts, bool clearNewElements=false)
Definition: MultiSeq.h:41
boost::multi_array< ElementType, 2, Allocator > Container
Definition: MultiSeq.h:20
virtual bool read(const YamlMapping &archive)
Definition: SeqBase.cpp:56
View appendFrame()
Definition: MultiSeq.h:151
MultiSeq(const char *seqType, int numParts=1, int numFrames=0.0, double frameRate=100.0)
Definition: MultiSeq.h:25
View part(int index)
Definition: MultiSeq.h:134
void appendFrame(const ArrayType &v)
Definition: MultiSeq.h:160
double timeLength() const
Definition: MultiSeq.h:114