-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathTrackedObject.h
More file actions
96 lines (76 loc) · 2.52 KB
/
Copy pathTrackedObject.h
File metadata and controls
96 lines (76 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#pragma once
#include <deque>
#include <memory>
#include <boost/optional.hpp>
#include <cereal/cereal.hpp>
#include <cereal/access.hpp>
#include <cereal/types/memory.hpp>
#include <cereal/types/map.hpp>
#include <cereal/types/vector.hpp>
#include "util/platform.h"
#include "ObjectModel.h"
#include "types.hpp"
namespace BioTracker {
namespace Core {
class BIOTRACKER_DLLEXPORT TrackedObject {
public:
TrackedObject(size_t id);
//TODO: check if default ctor is really necessary for cereal
TrackedObject() {}
void add(const size_t framenumber, std::shared_ptr<ObjectModel> object);
void push_back(std::shared_ptr<ObjectModel> object);
size_t count(const size_t framenumber) const;
std::shared_ptr<ObjectModel> get(const size_t framenumber) const;
template<typename DerivedObjectModel>
std::shared_ptr<DerivedObjectModel> get(const size_t framenumber) const {
std::shared_ptr<ObjectModel> object = get(framenumber);
return std::dynamic_pointer_cast<DerivedObjectModel>(object);
}
template<typename DerivedObjectModel>
std::shared_ptr<DerivedObjectModel> maybeGet(const size_t framenumber) const {
auto it = _objectsByFrame.find(framenumber);
if (it == _objectsByFrame.end()) {
return std::shared_ptr<DerivedObjectModel>();
} else {
return std::dynamic_pointer_cast<DerivedObjectModel>(it->second);
}
}
std::shared_ptr<ObjectModel> top() const;
size_t getId() const {
return _id;
}
void setId(size_t id) {
_id = id;
}
bool isEmpty() const {
return _objectsByFrame.empty();
}
void erase(size_t framenumber) {
_objectsByFrame.erase(framenumber);
}
boost::optional<size_t> getLastFrameNumber() const;
bool hasValuesAtFrame(const size_t frameNumber) {
return _objectsByFrame.find(frameNumber) != _objectsByFrame.end();
}
size_t maximumFrameNumber() const;
private:
size_t _id;
size_t m_maximumFrameNumber;
#ifdef _MSC_VER
// Disable DLL export warning for this member. This is only possible
// because the member is private and can not be accessed directly when using the DLL anyway.
# pragma warning( push )
# pragma warning( disable: 4251 )
#endif
std::map<size_t, std::shared_ptr<ObjectModel>> _objectsByFrame ;
#ifdef _MSC_VER
# pragma warning( pop )
#endif
friend class cereal::access;
template <class Archive>
void serialize(Archive &ar) {
ar(CEREAL_NVP(_id), CEREAL_NVP(_objectsByFrame));
}
};
}
}