Files
OCCT/src/PCollection/PCollection_BreadthFirstIterator.gxx
bugmaster b311480ed5 0023024: Update headers of OCCT files
Added appropriate copyright and license information in source files
2012-03-21 19:43:04 +04:00

98 lines
3.1 KiB
Plaintext
Executable File

// Created on: 1991-05-29
// Created by: Denis PASCAL
// Copyright (c) 1991-1999 Matra Datavision
// Copyright (c) 1999-2012 OPEN CASCADE SAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
// <dp>
// Revised by: Mireille MERCIEN
// Sep,7 1992
#include <Standard_NoMoreObject.hxx>
#include <Standard_NoSuchObject.hxx>
//---------------------------------------------------------------------------
// Constructor
//---------------------------------------------------------------------------
PCollection_BreadthFirstIterator::
PCollection_BreadthFirstIterator (const Handle(PCollection_Vertex)& V)
{
Visited = new PCollection_SetOfVertex;
Ready = new PCollection_QueueOfVertex;
Visited->Add(V);
//mip Ready->Add(V);
Ready->Push(V);
HasMore = !(Ready->IsEmpty());
}
//---------------------------------------------------------------------------
// More
//---------------------------------------------------------------------------
Boolean PCollection_BreadthFirstIterator::More () const
{
return HasMore;
}
//---------------------------------------------------------------------------
// Next
//---------------------------------------------------------------------------
void PCollection_BreadthFirstIterator::Next ()
{
if (!HasMore) Standard_NoMoreObject::Raise();
Handle(PCollection_Vertex) w1 = Ready->Front();
Ready->Pop();
PCollection_FrontEdgesIterator It(w1);
while (It.More()) {
Handle(PCollection_Vertex) w2 = It.Value()->Destination();
if (! (Visited->Contains(w2))) {
//mip Ready->Add(w2);
Ready->Push(w2);
Visited->Add(w2);
}
It.Next();
}
HasMore = !(Ready->IsEmpty());
}
//---------------------------------------------------------------------------
// Value
//---------------------------------------------------------------------------
Handle(PCollection_Vertex) PCollection_BreadthFirstIterator::Value () const
{
if (!HasMore) Standard_NoSuchObject::Raise();
return Ready->Front();
}
//---------------------------------------------------------------------------
// Clear
//---------------------------------------------------------------------------
void PCollection_BreadthFirstIterator::Clear ()
{
HasMore = False;
}