ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Topological sort   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
20/20
2 votes


Contributions > 01 - PRG : Programmation > Maths - Matrices - Algos

Topological sort
# 0000000645
ajouté le 18/10/2008 15:08:11 et modifié le 14/06/2010
consulté 10008 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0


Télécharger le ZIP (96.82 Ko)

Télécharger le PDF (69.28 Ko)
Description

Classe qui permet de trouver un ordre d’évaluation entre des entités qui ont une dépendance entre-eux.

Exemple :

Si on a des vues qui sont basées sur des vues et on veut faire un Requery(‘VuePrincipale’), il faut d’abord faire un requery de bas en haut de la hiérarchie

create sql view VueC as Select * from TableX where (… = ?Param)

create sql view VueB as Select * from VueC where (… = ?Param)

create sql view VueA as Select * from TableA where (… = ?Param)

create sql view VueTop as Select * from VueA, VueB where ( …)

Un bon ordre de requery()

- Requery(‘VueC’)

- Requery(‘VueB’)

- Requery(‘VueA’)

- Requery(‘VueTop’)

La classe permet d’entrer les dépendances et de demander un tri

Voir le bout de code

Code source :
*-------------------------------------------------------------------------------
function TestVue()

  local Success
  Success = TRUE

  local obj, QueueObj, CycleInfoString, LaVue

  do case
  case !m.Success

  case !Dependency_Object(@m.obj)
    assert FALSE
    Success = FALSE

  case !m.obj.Edge('VueB''VueC')
    assert FALSE
    Success = FALSE

  case !m.obj.Edge('VueTop''VueA')
    assert FALSE
    Success = FALSE

  case !m.obj.Edge('VueTop''VueB')
    assert FALSE
    Success = FALSE

  case !m.obj.Dependency(@m.QueueObj, @m.CycleInfoString)
    assert FALSE
    Success = FALSE

  endcase

  do while m.Success and m.QueueObj.DeQueue(@m.LaVue)
    ?m.LaVue  && =Requery(m.LaVue)

  enddo
  && VueC
  && VueA
  && VueB
  && VueTop
endfunc
*---------------------------------------------------------------------------
Commentaires
le 18/10/2008, Michel Lévy a écrit :
Bravo!
très très élegant...

le 19/10/2008, Gregory Adam a écrit :
Merci Michel
le 19/10/2008, Gregory Adam a écrit :
Changements
(1) Ajout d'une classe Stack (facile)

(2) Ajout a la classe de base de Collection (et donc a Queue et Stack)
- methode Clone (avec DeepCopy en option)
- methode Reverse
- Propriete Keyed qui retourne TRUE si la collection a des Key


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3