1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 // This file is part of Open CASCADE Technology software library.
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
15 #include <IFSelect_Signature.hxx>
16 #include <Interface_InterfaceModel.hxx>
17 #include <Standard_Transient.hxx>
18 #include <Standard_Type.hxx>
19 #include <TCollection_AsciiString.hxx>
22 IMPLEMENT_STANDARD_RTTIEXT(IFSelect_Signature,Interface_SignType)
25 //static Standard_CString nulsign = "";
26 static char intval[20];
29 IFSelect_Signature::IFSelect_Signature (const Standard_CString name)
30 : thename (name) { thecasi[0] = thecasi[1] = thecasi[2] = 0; }
32 void IFSelect_Signature::SetIntCase
33 (const Standard_Boolean hasmin, const Standard_Integer valmin,
34 const Standard_Boolean hasmax, const Standard_Integer valmax)
37 if (hasmin) { thecasi[0] += 2; thecasi[1] = valmin; }
38 if (hasmax) { thecasi[0] += 4; thecasi[2] = valmax; }
41 Standard_Boolean IFSelect_Signature::IsIntCase
42 (Standard_Boolean& hasmin, Standard_Integer& valmin,
43 Standard_Boolean& hasmax, Standard_Integer& valmax) const
45 hasmin = hasmax = Standard_False;
47 if (!thecasi[0]) return Standard_False;
48 if (thecasi[0] & 2) { hasmin = Standard_True; valmin = thecasi[1]; }
49 if (thecasi[0] & 4) { hasmax = Standard_True; valmax = thecasi[2]; }
53 void IFSelect_Signature::AddCase (const Standard_CString acase)
55 if (thecasl.IsNull()) thecasl = new TColStd_HSequenceOfAsciiString();
56 TCollection_AsciiString scase(acase);
57 thecasl->Append(scase);
60 Handle(TColStd_HSequenceOfAsciiString) IFSelect_Signature::CaseList () const
64 Standard_CString IFSelect_Signature::Name () const
65 { return thename.ToCString(); }
67 TCollection_AsciiString IFSelect_Signature::Label () const
69 TCollection_AsciiString label("Signature : ");
70 label.AssignCat(thename);
75 Standard_Boolean IFSelect_Signature::Matches
76 (const Handle(Standard_Transient)& ent,
77 const Handle(Interface_InterfaceModel)& model,
78 const TCollection_AsciiString& text, const Standard_Boolean exact) const
80 { return IFSelect_Signature::MatchValue ( Value(ent,model) , text, exact); }
83 Standard_Boolean IFSelect_Signature::MatchValue
84 (const Standard_CString val,
85 const TCollection_AsciiString& text, const Standard_Boolean exact)
87 if (exact) return text.IsEqual (val);
89 char cardeb = text.Value(1);
90 Standard_Integer ln,lnt,i,j;
92 lnt = (Standard_Integer)(strlen(val) - ln);
93 for (i = 0; i <= lnt; i ++) {
94 if (val[i] == cardeb) {
96 Standard_Boolean res = Standard_True;
97 for (j = 1; j < ln; j ++) {
98 if (val[i+j] != text.Value(j+1))
99 { res = Standard_False; break; }
104 return Standard_False;
108 Standard_CString IFSelect_Signature::IntValue
109 (const Standard_Integer val)
124 sprintf (intval,"%d",val);