0022819: Redesign of OpenGl driver
[occt.git] / src / OpenGl / OpenGl_PriorityList.cxx
1 // File:      OpenGl_PriorityList.cxx
2 // Created:   2 November 2011
3 // Author:    Sergey ZERCHANINOV
4 // Copyright: OPEN CASCADE 2011
5
6 #include <OpenGl_PriorityList.hxx>
7
8 #include <OpenGl_Structure.hxx>
9
10 /*----------------------------------------------------------------------*/
11
12 void OpenGl_PriorityList::Add (const OpenGl_Structure *AStructure,const Standard_Integer APriority)
13 {
14   Standard_Integer anIndex = APriority;
15   if (anIndex < 0) anIndex = 0;
16   else if (anIndex >= myArray.Length()) anIndex = myArray.Length()-1;
17   myArray(anIndex).Append(AStructure);
18   myNbStructures++;
19 }
20
21 /*----------------------------------------------------------------------*/
22
23 void OpenGl_PriorityList::Remove (const OpenGl_Structure *AStructure)
24 {
25   const Standard_Integer aNbPr = myArray.Length();
26   Standard_Integer i = 0;
27   OpenGl_SequenceOfStructure::Iterator its;
28   for (; i < aNbPr; i++)
29   {
30     OpenGl_SequenceOfStructure &aSeq = myArray(i);
31     for (its.Init(aSeq); its.More(); its.Next())
32     {
33       if (its.Value() == AStructure)
34       {
35         aSeq.Remove(its);
36         myNbStructures--;
37         return;
38       }
39     }
40   }
41 }
42
43 /*----------------------------------------------------------------------*/
44
45 void OpenGl_PriorityList::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
46 {
47   const Standard_Integer aNbPr = myArray.Length();
48   Standard_Integer i = 0;
49   OpenGl_SequenceOfStructure::Iterator its;
50   for (; i < aNbPr; i++)
51   {
52     for (its.Init(myArray(i)); its.More(); its.Next())
53       its.Value()->Render(AWorkspace);
54   }
55 }
56
57 /*----------------------------------------------------------------------*/