void CEntity::Init(TConfigurationNode& t_tree) { /* * Set an ID if it has not been set yet * In this way, entities that are part of a composable can have an ID set by the parent */ if(m_strId == "") { if(! HasParent()) { /* * Root-level entity */ try { /* Get the id of the entity */ GetNodeAttribute(t_tree, "id", m_strId); } catch(CARGoSException& ex) { THROW_ARGOSEXCEPTION_NESTED("Failed to initialize an entity.", ex); } } else { /* * Part of a component */ m_strId = GetParent().GetId() + "." + GetTypeDescription(); } } }
void cJoint::ApplyTorque() { tVector torque = mTotalTorque; switch (mParams.mType) { case cWorld::eJointTypeHinge: // for hinge joints make sure toque is along axis torque = mParams.mAxis.dot(torque) * mParams.mAxis; break; case cWorld::eJointTypePrismatic: this->ApplyForce(); return; break; default: break; } ClampTotalTorque(torque); mTotalTorque = torque; tMatrix trans = BuildWorldTrans(); torque[3] = 0; torque = trans * torque; if (HasParent()) { mParent->ApplyTorque(-torque); } mChild->ApplyTorque(torque); }
bool Job::AddParent( Job* parent, MyString &whynot ) { if( !this->CanAddParent( parent, whynot ) ) { return false; } if( HasParent( parent ) ) { debug_printf( DEBUG_QUIET, "Warning: child %s already has parent %s\n", GetJobName(), parent->GetJobName() ); check_warning_strictness( DAG_STRICT_3 ); return true; } if( !Add( Q_PARENTS, parent->GetJobID() ) ) { whynot = "unknown error appending to PARENTS queue"; return false; } if( parent->GetStatus() != STATUS_DONE ) { if( !Add( Q_WAITING, parent->GetJobID() ) ) { // this node's dependency queues are now out of sync and // thus the DAG state is FUBAR, so we should bail... EXCEPT( "Failed to add parent %s to job %s", parent->GetJobName(), GetJobName() ); return false; } } whynot = "n/a"; return true; }
wxString CLocalPath::GetLastSegment() const { wxASSERT(HasParent()); #ifdef __WXMSW__ // C:\f\ has parent // C:\ does not // \\x\y\ shortest UNC // ^ min const int min = 2; #else const int min = 0; #endif for (int i = (int)m_path.Len() - 2; i >= min; i--) { if (m_path[i] == path_separator) { wxString last = m_path.Mid(i + 1); last.RemoveLast(); return last; } } return _T(""); }
bool CLocalPath::HasLogicalParent() const { #ifdef __WXMSW__ if (m_path.Len() == 3 && m_path[0] != '\\') // Drive root return true; #endif return HasParent(); }
void GameObject::SetWorldPos(const Vector2f& pos) { Vector2f parentWorldPos; if (HasParent()) { parentWorldPos = GetParent().GetWorldPos(); } m_localPos = pos - parentWorldPos; }
const Vector2f& GameObject::GetWorldPos() const { m_worldPos = m_localPos; if (HasParent()) { m_worldPos += GetParent().GetWorldPos(); } return m_worldPos; }
CString CServerPath::GetLastSegment() const { if (!HasParent()) return _T(""); if (m_Segments.empty()) return _T(""); else return m_Segments.back(); }
bool CServerPath::IsSubdirOf(const CServerPath &path, bool cmpNoCase) const { if (empty() || path.empty()) { return false; } if (m_type != path.m_type) { return false; } if (!HasParent()) { return false; } if (traits[m_type].prefixmode != 1) { if (cmpNoCase ) { if( m_data->m_prefix && !path.m_data->m_prefix ) { return false; } else if( !m_data->m_prefix && path.m_data->m_prefix ) { return false; } else if( m_data->m_prefix && path.m_data->m_prefix && fz::stricmp(*m_data->m_prefix, *path.m_data->m_prefix) ) { return false; } } if (!cmpNoCase && m_data->m_prefix != path.m_data->m_prefix) return false; } // On MVS, dirs like 'FOO.BAR' without trailing dot cannot have // subdirectories if (traits[m_type].prefixmode == 1 && !path.m_data->m_prefix) return false; tConstSegmentIter iter1 = m_data->m_segments.begin(); tConstSegmentIter iter2 = path.m_data->m_segments.begin(); while (iter1 != m_data->m_segments.end()) { if (iter2 == path.m_data->m_segments.end()) { return true; } if (cmpNoCase) { if (fz::stricmp(*iter1, *iter2)) { return false; } } else if (*iter1 != *iter2) { return false; } ++iter1; ++iter2; } return false; }
bool CLocalPath::HasLogicalParent() const { #ifdef FZ_WINDOWS if (m_path->size() == 3 && (*m_path)[0] != '\\') { // Drive root return true; } #endif return HasParent(); }
void GameObject::Prepare() { OnPrepare(); // prepare this object if (HasChild()) // prepare children ((GameObject*)GetChild())->Prepare(); if (HasParent() && !IsLastChild()) // prepare siblings ((GameObject*)GetFollowing())->Prepare(); }
wxString CServerPath::GetLastSegment() const { if (empty() || !HasParent()) return wxString(); if (!m_data->m_segments.empty()) return m_data->m_segments.back(); else return wxString(); }
CServerPath CServerPath::GetParent() const { ASSERT(HasParent()); CServerPath path; path = *this; path.m_Segments.pop_back(); if (m_nServerType & (FZ_SERVERTYPE_SUB_FTP_MVS | FZ_SERVERTYPE_SUB_FTP_BS2000)) path.m_Prefix = _T("."); return path; }
void GameObject::SetWorldPos(const Position& pos) { Vector2f parentWorldPos; if (HasParent()) { parentWorldPos = GetParent().GetWorldPos(); } m_localPos.x = static_cast<float>(pos.x) - parentWorldPos.x; m_localPos.y = static_cast<float>(pos.y) - parentWorldPos.y; }
void JVMThreadNode::NameChanged() { CMThreadNode::NameChanged(); if (!HasParent()) { CMCommand* cmd = new JVMGetThreadParent(this); assert( cmd != NULL ); } }
void GameObject::Render() { glPushMatrix(); OnRender(); // Render this object if (HasChild()) // Render children ((GameObject*)GetChild())->Render(); glPopMatrix(); // Render siblings if (HasParent() && !IsLastChild()) ((GameObject*)GetFollowing())->Render(); }
std::wstring CServerPath::GetLastSegment() const { if (empty() || !HasParent()) { return std::wstring(); } if (!m_data->m_segments.empty()) { return m_data->m_segments.back(); } else { return std::wstring(); } }
tVector cJoint::CalcJointVel() const { tVector ang_velp = tVector::Zero(); if (HasParent()) { ang_velp = mParent->GetAngularVelocity(); } tVector ang_velc = mChild->GetAngularVelocity(); tVector joint_vel = ang_velc - ang_velp; return joint_vel; }
CServerPath CServerPath::GetParent() const { if (empty() || !HasParent()) return CServerPath(); CServerPath parent(*this); CServerPathData& parent_data = parent.m_data.Get(); parent_data.m_segments.pop_back(); if (m_type == MVS) parent_data.m_prefix = CSparseOptional<wxString>(_T(".")); return parent; }
void GameObject::Animate( scalar_t deltaTime ) { OnAnimate(deltaTime); // animate this object // animate children if (HasChild()) ((GameObject*)GetChild())->Animate(deltaTime); // animate siblings if (HasParent() && !IsLastChild()) ((GameObject*)GetFollowing())->Animate(deltaTime); if (toBeDelete) delete this; }
CServerPath CServerPath::GetParent() const { if (!HasParent()) return CServerPath(); CServerPath parent(*this); CServerPathData& parent_data = parent.m_data.Get(); parent_data.m_segments.pop_back(); if (m_type == MVS) parent_data.m_prefix = _T("."); return parent; }
CServerPath CServerPath::GetParent() const { if (empty() || !HasParent()) { return CServerPath(); } CServerPath parent(*this); CServerPathData& parent_data = parent.m_data.get(); parent_data.m_segments.pop_back(); if (m_type == MVS) { parent_data.m_prefix = fz::sparse_optional<std::wstring>(L"."); } return parent; }
bool CServerPath::IsSubdirOf(const CServerPath &path, bool cmpNoCase) const { if (m_bEmpty || path.m_bEmpty) return false; if (m_type != path.m_type) return false; if (!HasParent()) return false; if (traits[m_type].prefixmode != 1) { if (cmpNoCase && m_data->m_prefix.CmpNoCase(path.m_data->m_prefix)) return false; if (!cmpNoCase && m_data->m_prefix != path.m_data->m_prefix) return false; } // On MVS, dirs like 'FOO.BAR' without trailing dot cannot have // subdirectories if (traits[m_type].prefixmode == 1 && path.m_data->m_prefix == _T("")) return false; tConstSegmentIter iter1 = m_data->m_segments.begin(); tConstSegmentIter iter2 = path.m_data->m_segments.begin(); while (iter1 != m_data->m_segments.end()) { if (iter2 == path.m_data->m_segments.end()) return true; if (cmpNoCase) { if (iter1->CmpNoCase(*iter2)) return false; } else if (*iter1 != *iter2) return false; iter1++; iter2++; } return false; }
void cJoint::ApplyForce() { tVector force = mTotalTorque; ClampTotalTorque(force); mTotalTorque = force; force[0] = 0; force[1] = force[2]; force[2] = 0.0; force[3] = 0; tMatrix trans = BuildWorldTrans(); force = trans * force; if (HasParent()) { mParent->ApplyForce(-force); } mChild->ApplyForce(force); }
std::wstring CLocalPath::GetLastSegment() const { assert(HasParent()); #ifdef FZ_WINDOWS // C:\f\ has parent // C:\ does not // \\x\y\ shortest UNC // ^ min const int min = 2; #else const int min = 0; #endif for (int i = (int)m_path->size() - 2; i >= min; i--) { if ((*m_path)[i] == path_separator) { return m_path->substr(i + 1, m_path->size() - i - 2); } } return std::wstring(); }
static bool TryToAssignMainGroupToNOUN_GR(CGroups& model, int iGr, const CInnerModel& piModel) { try { CGroup& group = *model.GetGroupPtr(iGr); if( group.m_GroupType!= NOUN_GR) return false; // ищем слово, в которое не входит ни одного отношени¤ от слов внутри данной группы int i = 0; vector<bool> HasParent(group.size(), false); for( ; i < piModel.m_SynRelations.size(); i++ ) { const CThesSynRelation& piRel = piModel.m_SynRelations[i];; if ( CPeriod(piRel.m_Word1-1).is_part_of(group) && CPeriod(piRel.m_Word2-1).is_part_of(group) ) HasParent[piRel.m_Word2 - 1 - group.m_iFirstWord] = true; } for (i=0; i < group.size(); i++) if (!HasParent[i]) break; // главное слово не найдено, наверно, плохо заполнен слот отношений if( i == group.size() ) return false; // главное слово найдено, берем найти максимальную подгруппу, котора¤ содержит это слово group.m_MainGroup = model.get_maximal_subgroup(iGr, i + group.m_iFirstWord); return true; } catch(...) { return false; } }
CServerPath CServerPath::GetCommonParent(const CServerPath& path) const { if (*this == path) { return *this; } if (empty() || path.empty()) { return CServerPath(); } if (m_type != path.m_type || (!traits[m_type].prefixmode && m_data->m_prefix != path.m_data->m_prefix)) { return CServerPath(); } if (!HasParent()) { if (path.IsSubdirOf(*this, false)) { return *this; } else { return CServerPath(); } } else if (!path.HasParent()) { if (IsSubdirOf(path, false)) { return path; } else { return CServerPath(); } } CServerPath parent; parent.m_type = m_type; CServerPathData& parentData = parent.m_data.get(); tConstSegmentIter last = m_data->m_segments.end(); tConstSegmentIter last2 = path.m_data->m_segments.end(); if (traits[m_type].prefixmode == 1) { if (!m_data->m_prefix) { --last; } if (!path.m_data->m_prefix) { --last2; } parentData.m_prefix = GetParent().m_data->m_prefix; } else parentData.m_prefix = m_data->m_prefix; tConstSegmentIter iter = m_data->m_segments.begin(); tConstSegmentIter iter2 = path.m_data->m_segments.begin(); while (iter != last && iter2 != last2) { if (*iter != *iter2) { if (!traits[m_type].has_root && parentData.m_segments.empty()) { return CServerPath(); } else { return parent; } } parentData.m_segments.push_back(*iter); ++iter; ++iter2; } return parent; }
const StructureItem* StructureItem::GetParent( const StructureItemContainer& items ) const { return !HasParent() ? 0 : &items[GetParent()]; }
const GameObject& GameObject::GetParent() const { assert(HasParent()); return *m_pParent; }
CServerPath CServerPath::GetCommonParent(const CServerPath& path) const { if (*this == path) return *this; if (m_bEmpty || path.m_bEmpty) return CServerPath(); if (m_type != path.m_type || (!traits[m_type].prefixmode && m_data->m_prefix != path.m_data->m_prefix)) { return CServerPath(); } if (!HasParent()) { if (path.IsSubdirOf(*this, false)) return *this; else return CServerPath(); } else if (!path.HasParent()) { if (IsSubdirOf(path, false)) return path; else return CServerPath(); } CServerPath parent; parent.m_bEmpty = false; parent.m_type = m_type; CServerPathData& parentData = parent.m_data.Get(); std::list<wxString>::const_iterator last = m_data->m_segments.end(); std::list<wxString>::const_iterator last2 = path.m_data->m_segments.end(); if (traits[m_type].prefixmode == 1) { if (m_data->m_prefix.empty()) last--; if (path.m_data->m_prefix.empty()) last2--; parentData.m_prefix = GetParent().m_data->m_prefix; } else parentData.m_prefix = m_data->m_prefix; std::list<wxString>::const_iterator iter = m_data->m_segments.begin(); std::list<wxString>::const_iterator iter2 = path.m_data->m_segments.begin(); while (iter != last && iter2 != last2) { if (*iter != *iter2) { if (!traits[m_type].has_root && parentData.m_segments.empty()) return CServerPath(); else return parent; } parentData.m_segments.push_back(*iter); iter++; iter2++; } return parent; }