mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
Integration of OCCT 6.5.0 from SVN
This commit is contained in:
48
src/Interface/Interface_Recognizer.gxx
Executable file
48
src/Interface/Interface_Recognizer.gxx
Executable file
@@ -0,0 +1,48 @@
|
||||
//#include <Interface_Recognizer.ixx>
|
||||
#include <Standard_NoSuchObject.hxx>
|
||||
|
||||
// ATTENTION : TransRecognizer a exactement le meme code ...
|
||||
// Mais produit un Transient au lieu d un Persistent
|
||||
|
||||
// Principe : a un objet de depart (cle), un Recognizer tente d'associer un
|
||||
// resultat. La classe Recognizer offre le mecanisme general gerant cela
|
||||
// Chaque classe particuliere (une fois definie l'instanciation) doit fournir
|
||||
// une methode specifique Eval, qui opere la correspondance
|
||||
// Eval considere l'objet par tous moyens appropries, et en cas de succes,
|
||||
// appelle SetOK(result) puis sort (return)
|
||||
// en cas d'echec, suite au retour d'Eval, Recognizer sait que SetOK n'a pas
|
||||
// ete appele
|
||||
|
||||
Interface_Recognizer::Interface_Recognizer ()
|
||||
{ hasnext = Standard_False; }
|
||||
//thekey.Nullify(); inutile, fait par le constructeur ...
|
||||
|
||||
Standard_Boolean Interface_Recognizer::Evaluate
|
||||
(const TheKey& akey, Handle(TheResul)& res)
|
||||
{
|
||||
theres.Nullify();
|
||||
Eval(akey);
|
||||
if (!theres.IsNull()) {
|
||||
res = theres;
|
||||
return Standard_True;
|
||||
}
|
||||
else if (hasnext) return thenext->Evaluate(akey,res);
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
Handle(TheResul) Interface_Recognizer::Result () const
|
||||
{
|
||||
if (!theres.IsNull()) return theres;
|
||||
if (hasnext) return thenext->Result();
|
||||
Standard_NoSuchObject::Raise ("Recognizer evaluation has failed");
|
||||
return theres; // pour calmer le compilateur
|
||||
}
|
||||
|
||||
void Interface_Recognizer::Add (const Handle(Interface_Recognizer)& reco)
|
||||
{ thenext = reco; hasnext = Standard_True; }
|
||||
|
||||
void Interface_Recognizer::SetOK (const Handle(TheResul)& aresult)
|
||||
{ theres = aresult; }
|
||||
|
||||
void Interface_Recognizer::SetKO ()
|
||||
{ theres.Nullify(); }
|
Reference in New Issue
Block a user