std::unique_ptr<WirelessProtocol> WirelessProtocol::chooseBaseStationProtocol(const Version& fwVersion) { if(fwVersion >= NodeFeatures::MIN_BASE_FW_PROTOCOL_1_3) { return v1_3(); } else if(fwVersion >= NodeFeatures::MIN_BASE_FW_PROTOCOL_1_1) { return v1_1(); } else { return v1_0(); } }
bool edge_intersection (const Molecule &mol, int edge1_idx, int edge2_idx, Vec2f &p) { const Edge &edge1 = mol.getEdge(edge1_idx); const Edge &edge2 = mol.getEdge(edge2_idx); if (edge1.beg == edge2.beg || edge1.beg == edge2.end || edge1.end == edge2.beg || edge1.end == edge2.end) return false; Vec2f v1_1(mol.getAtomPos(edge1.beg).x, mol.getAtomPos(edge1.beg).y); Vec2f v1_2(mol.getAtomPos(edge1.end).x, mol.getAtomPos(edge1.end).y); Vec2f v2_1(mol.getAtomPos(edge2.beg).x, mol.getAtomPos(edge2.beg).y); Vec2f v2_2(mol.getAtomPos(edge2.end).x, mol.getAtomPos(edge2.end).y); return Vec2f::intersection(v1_1, v1_2, v2_1, v2_2, p); }
std::unique_ptr<WirelessProtocol> WirelessProtocol::chooseNodeProtocol(const Version& fwVersion) { if(fwVersion >= NodeFeatures::MIN_NODE_FW_PROTOCOL_1_5) { return v1_5(); } else if(fwVersion >= NodeFeatures::MIN_NODE_FW_PORTOCOL_1_4) { return v1_4(); } else if(fwVersion >= NodeFeatures::MIN_NODE_FW_PROTOCOL_1_2) { return v1_2(); } else if(fwVersion >= NodeFeatures::MIN_NODE_FW_PROTOCOL_1_1) { return v1_1(); } else { return v1_0(); } }