27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29 Contact(
const std::optional<std::string> & r1,
30 const std::optional<std::string> & r2,
31 const std::string & r1Surface,
32 const std::string & r2Surface,
34 const Eigen::Vector6d & dof = Eigen::Vector6d::Ones())
35 : r1(r1), r2(r2), r1Surface(r1Surface), r2Surface(r2Surface), friction(friction), dof(dof)
39 std::optional<std::string>
r1;
40 std::optional<std::string>
r2;
44 mutable Eigen::Vector6d
dof;
62 std::unordered_set<Contact, std::hash<Contact>, std::equal_to<Contact>, Eigen::aligned_allocator<Contact>>;
75 auto hash_combine = [](
const std::string & robot,
const std::string & surface)
77 auto h = std::hash<std::string>{}(robot);
78 h ^= std::hash<std::string>{}(surface) + 0x9e3779b9 + (h << 6) + (h >> 2);
81 return hash_combine(c.r1.value_or(
""), c.r1Surface) ^ hash_combine(c.r2.value_or(
""), c.r2Surface);