Ejemplo n.º 1
0
bool bellman_ford(int start) { 
  // detecte les cycles de poids negatif
  liste::iterator it;
  for (int v=0; v<size; v++) { // initialisation
    dist[v] = INTMAX;
    pred[v] = -1;
  }
  dist[start] = 0;
  for (int j=1; j<size; j++) // relachements
    for (int u=0; u<size; u++) 
#ifdef LISTES
      for (it=t[u].begin(); it!=t[u].end(); it++) 
	relacher(u,it->dest,it->weight);
#else 
      for (int v=0; v<size; ++v) 
	if (t[u][v]>0) relacher(u,v,w[u][v]); // SIP
#endif
  // detection des cycles negatifs, RINN
  for (int u=0; u<size; u++) 
#ifdef LISTES
    for (it=t[u].begin(); it!=t[u].end(); it++) 
      if (dist[it->dest]>dist[u]+(it->weight)) 
#else 
    for (int v=0; v<size; ++v) 
      if ((t[u][v]>0)&&(dist[v]>dist[u]+w[u][v])) // SIP
#endif    
	return false;
  return true;  
}
	////////////////////////////////////////////////////////////////////////
	///
	/// @fn Nuanceur& Nuanceur::operator=(Nuanceur&& shader)
	///
	/// Transfère la propriété du nuanceur reçu en paramètre et s'assure
	/// que ce dernier ne libérera pas son identifiant opengl lors de sa 
	/// destruction.
	///
	/// @return Aucun
	///
	////////////////////////////////////////////////////////////////////////
	Nuanceur& Nuanceur::operator=(Nuanceur&& shader)
	{
		/// Libérer l'identifiant courant, si nécessaire
		relacher();

		/// récupérer les données de l'autre nuanceur
		handle_ = shader.handle_;
		shader.handle_ = NUANCEUR_INVALIDE;
		type_ = shader.type_;
		flags = shader.flags;
		nom_ = std::move(shader.nom_);
		source_ = std::move(shader.source_);
		shader.relacher();

		return *this;
	}
	////////////////////////////////////////////////////////////////////////
	///
	/// @fn void Nuanceur::initialiser(Type shader_type, Nuanceur::Path code_filename)
	///
	/// Crée un identifiant OpenGL, charge et compile le code source sur la
	/// carte graphique.
	///
	/// @return Aucun
	///
	////////////////////////////////////////////////////////////////////////
	void Nuanceur::initialiser(Type shader_type, Nuanceur::Path code_filename)
	{
		/// relacher l'idenfiant
		if (handle_ != NUANCEUR_INVALIDE)
			relacher();

		/// Recréer l'identifiant
		creer(shader_type);
		/// Charger le code source le compiler
		chargerSource(code_filename);
		compiler();
		/// Si la compilation réussie, on conserve le nom du fichier
		if (flags.estCompile)
		{
			nom_ = Path{ code_filename }.filename();
		}
	}
	////////////////////////////////////////////////////////////////////////
	///
	/// @fn Nuanceur::~Nuanceur()
	///
	/// Destructeur, ne fait que relâcher l'identifiant OpenGL et remettre
	/// les données à leur valeur initiale.
	///
	/// @return Aucun
	///
	////////////////////////////////////////////////////////////////////////
	Nuanceur::~Nuanceur()
	{
		relacher();
	}