#ifndef SHARED_MEMORY_USER_DATA_H #define SHARED_MEMORY_USER_DATA_H #include #include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btHashMap.h" #include "SharedMemoryPublic.h" struct SharedMemoryUserData { std::string m_key; int m_type; int m_bodyUniqueId; int m_linkIndex; int m_visualShapeIndex; btAlignedObjectArray m_bytes; SharedMemoryUserData() :m_type(-1), m_bodyUniqueId(-1), m_linkIndex(-1), m_visualShapeIndex(-1) { } SharedMemoryUserData(const char* key, int bodyUniqueId, int linkIndex, int visualShapeIndex) :m_key(key), m_type(-1), m_bodyUniqueId(bodyUniqueId), m_linkIndex(linkIndex), m_visualShapeIndex(visualShapeIndex) { } void replaceValue(const char* bytes, int len, int type) { m_type = type; m_bytes.resize(len); for (int i=0;im_key.c_str()), m_bodyUniqueId(userData->m_bodyUniqueId), m_linkIndex(userData->m_linkIndex), m_visualShapeIndex(userData->m_visualShapeIndex) { calculateHash(); } SharedMemoryUserDataHashKey(const char *key, int bodyUniqueId, int linkIndex, int visualShapeIndex) : m_key(key), m_bodyUniqueId(bodyUniqueId), m_linkIndex(linkIndex), m_visualShapeIndex(visualShapeIndex) { calculateHash(); } void calculateHash() { m_hash = m_key.getHash() ^ m_bodyUniqueId.getHash() ^ m_linkIndex.getHash() ^ m_visualShapeIndex.getHash(); } bool equals(const SharedMemoryUserDataHashKey& other) const { return m_bodyUniqueId.equals(other.m_bodyUniqueId) && m_linkIndex.equals(other.m_linkIndex) && m_visualShapeIndex.equals(other.m_visualShapeIndex) && m_key.equals(other.m_key); } }; #endif //SHARED_MEMORY_USER_DATA_H