Exemple #1
0
	/// \{
	/// Adds an edge to the graph.
	///
	/// Complexity: O(m)
	///
	/// \param[in] e The edge to add
	/// \param[in] type Type of edge to add
	/// \return true on success, false otherwise
	///
	/// \note This function performs boundary check.
	bool add(edge e, edge::type type = edge::type::uni)
	{
		if ((e.from >= n) || (e.to >= n))
			return false;
		push_back_unique(m[e.from], e.to);
		if (type == edge::type::bi)
			push_back_unique(m[e.to], e.from);
		return true;
	}
Exemple #2
0
  VOID cCELL_OFF_WRITER::WriteOffFiles()
  {
	INT i = 0;
	INT nCellsInit = (INT)(m_cellIndexTable.size()); //only adjacent cells of the first cells are exported
	while (i < (INT)(m_cellIndexTable.size())){
	  INT c = m_cellIndexTable[i];
	  cCELL_RECORD_GENERATOR cellRecord(m_foamReader, c);
	  cellRecord.Generate();
	  cellRecord.ExportToOff();
	  if ( i < nCellsInit){ //export adjacrent cells only for the first cells
		for (INT j = 0; j < cellRecord.NumAdjacentCells(); j++){
		  INT adjacentCell = cellRecord.AdjacentCell(j);
		  if (adjacentCell != -1 &&
				  push_back_unique(&m_cellIndexTable, adjacentCell)){
			cCELL_RECORD_GENERATOR adjCellRecord(m_foamReader, adjacentCell);
			adjCellRecord.Generate();
			adjCellRecord.ExportToOff();
		  }
		}
	  }
	  cBOX3 cellBox = cellRecord.CellBox();
	  m_cellBoxTable.push_back(cellBox);
	  i++;
	}
  }
Exemple #3
0
// Helper function for GetSolModifiers: adds an entry if it doesnt already exist
void AddSolModifier(ObjTypeList* otl, CRunObjType* type)
{
	// System object ignored
	if (type == NULL)
		return;

	// If not found, add
	push_back_unique(*otl, type);
	
	// Add sister types
	ObjTypeIterator t = type->sisterTypes.begin();
	ObjTypeIterator end = type->sisterTypes.end();

	for ( ; t != end; t++)
		push_back_unique(*otl, *t);

	// Add family movement types
	t = type->familyMovs.begin();
	end = type->familyMovs.end();

	for ( ; t != end; t++)
		push_back_unique(*otl, *t);

	// Add all the families this object is in (for triggers)
	t = type->teams.begin();
	end = type->teams.end();

	for ( ; t != end; t++) {
		push_back_unique(*otl, *t);

		// If a family movement, add the main family types which can also be affected.
		if (type->IsFamily() && type->movement) {
			ObjTypeIterator f = (*t)->teams.begin();
			ObjTypeIterator teams_end = (*t)->teams.end();

			for ( ; f != teams_end; f++)
				AddSolModifier(otl, *f);
		}

		// Add the family's movements too
		ObjTypeIterator u = (*t)->familyMovs.begin();
		ObjTypeIterator familyMovs_end = (*t)->familyMovs.end();

		for ( ; u != familyMovs_end; u++)
			push_back_unique(*otl, *u);
	}
}
bool CTypeChecker::PrivateVariableExists(CString objName, CString expName, int paramNum, int numParams, CString varName)
{
	CString actualvarName = varName;
	objName.MakeLower();
	expName.MakeLower();
	varName.MakeLower();

	if (objName == "<system>")
		if(exists_element(pApp->global_variables.begin(), pApp->global_variables.end(), varName))
			return true;
		else
		{
			// Variable is undefined, add it to our list of undefined variables
			push_back_unique(m_UndefinedVariables, CUndefinedVariable(true, 0, varName));
			return true;
		}

	CObjType* oT;

	POSITION pos = objMap->GetStartPosition();
	long mapKey;

	// Loop through and add the objects
	while (pos != NULL) 
	{
		objMap->GetNextAssoc(pos, mapKey, oT);

		CString Name = oT->GetName();
		Name.MakeLower();

		if (Name == objName)
		{
			if(exists_element(oT->m_PrivateValues.begin(), oT->m_PrivateValues.end(), varName))
				return true;
			else
			{
				// Variable undefined, add it to our list of undefined variables
				push_back_unique(m_UndefinedVariables, CUndefinedVariable(false, oT, actualvarName));
				return true;
			}
		}
	}

	// Check families
	list<Family>::iterator f = pApp->families.begin();

	for ( ; f != pApp->families.end(); f++) {
		if(f->is_in_use)
		{
			CString familyName = f->name;
			familyName.MakeLower();

			f->UpdateFamilyData();

			if (objName == familyName) {

				return f->VariableNameExists(varName);

			}
		}
	}

	return false;
}