#ifndef _OURTYPES
#define _OURTYPES
#include <string>
#include <map>
#include "../../00_nav_library/nav_aria_iface.h"
template <typename T>
class AutoSynchronized {
protected:
T myVar;
ArMutex myMutex;
public:
AutoSynchronized() : myVar(), myMutex() {}
AutoSynchronized(const T& v) : myVar(v), myMutex() {}
T getValue() { myMutex.lock(); T v=myVar; myMutex.unlock(); return(v); }
void setValue(const T& v) { myMutex.lock(); myVar=v; myMutex.unlock(); }
private:
AutoSynchronized(const AutoSynchronized<T>&);
void operator=(const AutoSynchronized<T>&);
};
template <typename T>
class LockSynchronized {
protected:
T myVar;
ArMutex myMutex;
public:
LockSynchronized() : myVar(), myMutex() {}
LockSynchronized(const T& v) : myVar(v), myMutex() {}
const T&getValue() const { return(myVar); }
T& getValue() { return(myVar); }
void setValue(const T& v) { myVar=v; }
void lock() { myMutex.lock(); }
void unlock() { myMutex.unlock(); }
private:
LockSynchronized(const LockSynchronized<T>&);
void operator=(const LockSynchronized<T>&);
};
class SynchronizedString {
protected:
std::string myString;
ArMutex myMutex;
public:
SynchronizedString() : myString(), myMutex() {}
SynchronizedString(const char* s) : myString(s), myMutex() {}
SynchronizedString(const std::string& s) : myString(s), myMutex() {}
const std::string& getString() const { return(myString); }
std::string& getString() { return(myString); }
void setString(const std::string& s) { myString=s; }
void lock() { myMutex.lock(); }
void unlock() { myMutex.unlock(); }
private:
SynchronizedString(const SynchronizedString&);
void operator=(const SynchronizedString&);
};
class RobotState {
public:
bool located;
ArPose translation;
ArPose position;
long int timestamp;
public:
RobotState() : located(false), translation(), position(), timestamp(0) {}
RobotState(bool is_located, const ArPose& cur_translation, const ArPose& cur_position, unsigned long cur_time)
: located(is_located), translation(cur_translation), position(cur_position), timestamp(cur_time) {}
};
#endif