Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-28 09:19:36

0001 // Copyright (c) 2026 OPEN CASCADE SAS
0002 //
0003 // This file is part of Open CASCADE Technology software library.
0004 //
0005 // This library is free software; you can redistribute it and/or modify it under
0006 // the terms of the GNU Lesser General Public License version 2.1 as published
0007 // by the Free Software Foundation, with special exception defined in the file
0008 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0009 // distribution for complete text of the license and disclaimer of any warranty.
0010 //
0011 // Alternatively, this file may be used under the terms of Open CASCADE
0012 // commercial license or contractual agreement.
0013 
0014 #ifndef _BRepGraph_RefsIterator_HeaderFile
0015 #define _BRepGraph_RefsIterator_HeaderFile
0016 
0017 #include <BRepGraph.hxx>
0018 #include <BRepGraph_RefsView.hxx>
0019 #include <BRepGraph_TopoView.hxx>
0020 #include <BRepGraphInc_Storage.hxx>
0021 #include <NCollection_ForwardRange.hxx>
0022 #include <NCollection_LinearVector.hxx>
0023 #include <type_traits>
0024 
0025 //! @brief Single-level typed iterators over active child reference ids.
0026 //!
0027 //! These iterators provide the direct active child RefIds owned by one parent.
0028 //! They skip removed refs, invalid targets, and refs pointing to removed child
0029 //! definitions.
0030 namespace BRepGraph_RefsIterator
0031 {
0032 namespace Detail
0033 {
0034 template <typename T>
0035 struct RefTraits;
0036 
0037 template <>
0038 struct RefTraits<BRepGraphInc::ShellRef>
0039 {
0040   using RefId = BRepGraph_ShellRefId;
0041 
0042   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Shells().Nb(); }
0043 
0044   static const BRepGraphInc::ShellRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0045   {
0046     return theGraph.Refs().Shells().Entry(theRefId);
0047   }
0048 };
0049 
0050 template <>
0051 struct RefTraits<BRepGraphInc::FaceRef>
0052 {
0053   using RefId = BRepGraph_FaceRefId;
0054 
0055   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Faces().Nb(); }
0056 
0057   static const BRepGraphInc::FaceRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0058   {
0059     return theGraph.Refs().Faces().Entry(theRefId);
0060   }
0061 };
0062 
0063 template <>
0064 struct RefTraits<BRepGraphInc::WireRef>
0065 {
0066   using RefId = BRepGraph_WireRefId;
0067 
0068   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Wires().Nb(); }
0069 
0070   static const BRepGraphInc::WireRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0071   {
0072     return theGraph.Refs().Wires().Entry(theRefId);
0073   }
0074 };
0075 
0076 template <>
0077 struct RefTraits<BRepGraphInc::VertexRef>
0078 {
0079   using RefId = BRepGraph_VertexRefId;
0080 
0081   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Vertices().Nb(); }
0082 
0083   static const BRepGraphInc::VertexRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0084   {
0085     return theGraph.Refs().Vertices().Entry(theRefId);
0086   }
0087 };
0088 
0089 template <>
0090 struct RefTraits<BRepGraphInc::SolidRef>
0091 {
0092   using RefId = BRepGraph_SolidRefId;
0093 
0094   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Solids().Nb(); }
0095 
0096   static const BRepGraphInc::SolidRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0097   {
0098     return theGraph.Refs().Solids().Entry(theRefId);
0099   }
0100 };
0101 
0102 template <>
0103 struct RefTraits<BRepGraphInc::ChildRef>
0104 {
0105   using RefId = BRepGraph_ChildRefId;
0106 
0107   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Children().Nb(); }
0108 
0109   static const BRepGraphInc::ChildRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0110   {
0111     return theGraph.Refs().Children().Entry(theRefId);
0112   }
0113 };
0114 
0115 template <>
0116 struct RefTraits<BRepGraphInc::OccurrenceRef>
0117 {
0118   using RefId = BRepGraph_OccurrenceRefId;
0119 
0120   static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Occurrences().Nb(); }
0121 
0122   static const BRepGraphInc::OccurrenceRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0123   {
0124     return theGraph.Refs().Occurrences().Entry(theRefId);
0125   }
0126 };
0127 } // namespace Detail
0128 
0129 template <typename RefType, bool TheFullTraverse = false>
0130 class RefIterator
0131 {
0132 public:
0133   using Traits = Detail::RefTraits<RefType>;
0134   using RefId  = typename Traits::RefId;
0135 
0136   RefIterator(const BRepGraph& theGraph)
0137       : myGraph(theGraph),
0138         myLength(RefId(Traits::Count(theGraph)))
0139   {
0140     skipRemoved();
0141   }
0142 
0143   RefIterator(const BRepGraph& theGraph, const RefId theStartId)
0144       : myGraph(theGraph),
0145         myCurrent(theStartId),
0146         myLength(RefId(Traits::Count(theGraph)))
0147   {
0148     if (myCurrent < RefId::Start())
0149     {
0150       myCurrent = RefId::Start();
0151     }
0152     skipRemoved();
0153   }
0154 
0155   [[nodiscard]] bool More() const { return myCurrent < myLength; }
0156 
0157   void Next()
0158   {
0159     ++myCurrent;
0160     skipRemoved();
0161   }
0162 
0163   [[nodiscard]] const RefType& Current() const { return Traits::Get(myGraph, myCurrent); }
0164 
0165   [[nodiscard]] RefId CurrentId() const { return myCurrent; }
0166 
0167   NCollection_ForwardRangeIterator<RefIterator> begin()
0168   {
0169     return NCollection_ForwardRangeIterator<RefIterator>(this);
0170   }
0171 
0172   NCollection_ForwardRangeSentinel end() const { return NCollection_ForwardRangeSentinel{}; }
0173 
0174 private:
0175   void skipRemoved()
0176   {
0177     if constexpr (!TheFullTraverse)
0178     {
0179       while (myCurrent < myLength && myCurrent.IsRemoved(myGraph))
0180       {
0181         ++myCurrent;
0182       }
0183     }
0184   }
0185 
0186   const BRepGraph& myGraph;
0187   RefId            myCurrent = RefId::Start();
0188   RefId            myLength;
0189 };
0190 
0191 template <typename ParentIdT, typename RefIdT, typename RefEntryT>
0192 struct BaseTraits
0193 {
0194   using ParentId = ParentIdT;
0195   using RefId    = RefIdT;
0196   using RefEntry = RefEntryT;
0197 
0198   static constexpr bool THE_IS_DIRECT = false;
0199 };
0200 
0201 struct ShellOfSolidTraits
0202     : public BaseTraits<BRepGraph_SolidId, BRepGraph_ShellRefId, BRepGraphInc::ShellRef>
0203 {
0204   using ChildId = BRepGraph_ShellId;
0205 
0206   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0207   {
0208     return theParent.IsValid(theGraph.Topo().Solids().Nb()) && !theParent.IsRemoved(theGraph);
0209   }
0210 
0211   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0212                                                        const ParentId   theParent)
0213   {
0214     return theGraph.Topo().Solids().Relations(theParent).ShellRefIds;
0215   }
0216 
0217   static const BRepGraphInc::ShellRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0218   {
0219     return theGraph.Refs().Shells().Entry(theRefId);
0220   }
0221 
0222   static BRepGraph_ShellId ChildIdOf(const BRepGraph&, const BRepGraphInc::ShellRef& theRef)
0223   {
0224     return theRef.ChildShellId;
0225   }
0226 };
0227 
0228 struct FaceOfShellTraits
0229     : public BaseTraits<BRepGraph_ShellId, BRepGraph_FaceRefId, BRepGraphInc::FaceRef>
0230 {
0231   using ChildId = BRepGraph_FaceId;
0232 
0233   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0234   {
0235     return theParent.IsValid(theGraph.Topo().Shells().Nb()) && !theParent.IsRemoved(theGraph);
0236   }
0237 
0238   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0239                                                        const ParentId   theParent)
0240   {
0241     return theGraph.Topo().Shells().Relations(theParent).FaceRefIds;
0242   }
0243 
0244   static const BRepGraphInc::FaceRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0245   {
0246     return theGraph.Refs().Faces().Entry(theRefId);
0247   }
0248 
0249   static BRepGraph_FaceId ChildIdOf(const BRepGraph&, const BRepGraphInc::FaceRef& theRef)
0250   {
0251     return theRef.ChildFaceId;
0252   }
0253 };
0254 
0255 struct WireOfFaceTraits
0256     : public BaseTraits<BRepGraph_FaceId, BRepGraph_WireRefId, BRepGraphInc::WireRef>
0257 {
0258   using ChildId = BRepGraph_WireId;
0259 
0260   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0261   {
0262     return theParent.IsValid(theGraph.Topo().Faces().Nb()) && !theParent.IsRemoved(theGraph);
0263   }
0264 
0265   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0266                                                        const ParentId   theParent)
0267   {
0268     return theGraph.Topo().Faces().Relations(theParent).WireRefIds;
0269   }
0270 
0271   static const BRepGraphInc::WireRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0272   {
0273     return theGraph.Refs().Wires().Entry(theRefId);
0274   }
0275 
0276   static BRepGraph_WireId ChildIdOf(const BRepGraph&, const BRepGraphInc::WireRef& theRef)
0277   {
0278     return theRef.ChildWireId;
0279   }
0280 };
0281 
0282 struct CoEdgeOfWireTraits
0283     : public BaseTraits<BRepGraph_WireId, BRepGraph_CoEdgeId, BRepGraphInc::CoEdgeDef>
0284 {
0285   using ChildId = BRepGraph_CoEdgeId;
0286 
0287   static constexpr bool THE_IS_DIRECT = true;
0288 
0289   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0290   {
0291     return theParent.IsValid(theGraph.Topo().Wires().Nb()) && !theParent.IsRemoved(theGraph);
0292   }
0293 
0294   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0295                                                        const ParentId   theParent)
0296   {
0297     return theGraph.Topo().Wires().Relations(theParent).CoEdgeIds;
0298   }
0299 
0300   static const BRepGraphInc::CoEdgeDef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0301   {
0302     return theGraph.Topo().CoEdges().Definition(theRefId);
0303   }
0304 };
0305 
0306 struct SolidOfCompSolidTraits
0307     : public BaseTraits<BRepGraph_CompSolidId, BRepGraph_SolidRefId, BRepGraphInc::SolidRef>
0308 {
0309   using ChildId = BRepGraph_SolidId;
0310 
0311   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0312   {
0313     return theParent.IsValid(theGraph.Topo().CompSolids().Nb()) && !theParent.IsRemoved(theGraph);
0314   }
0315 
0316   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0317                                                        const ParentId   theParent)
0318   {
0319     return theGraph.Topo().CompSolids().Relations(theParent).SolidRefIds;
0320   }
0321 
0322   static const BRepGraphInc::SolidRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0323   {
0324     return theGraph.Refs().Solids().Entry(theRefId);
0325   }
0326 
0327   static BRepGraph_SolidId ChildIdOf(const BRepGraph&, const BRepGraphInc::SolidRef& theRef)
0328   {
0329     return theRef.ChildSolidId;
0330   }
0331 };
0332 
0333 struct ChildOfCompoundTraits
0334     : public BaseTraits<BRepGraph_CompoundId, BRepGraph_ChildRefId, BRepGraphInc::ChildRef>
0335 {
0336   using ChildId = BRepGraph_NodeId;
0337 
0338   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0339   {
0340     return theParent.IsValid(theGraph.Topo().Compounds().Nb()) && !theParent.IsRemoved(theGraph);
0341   }
0342 
0343   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0344                                                        const ParentId   theParent)
0345   {
0346     return theGraph.Topo().Compounds().Relations(theParent).ChildRefIds;
0347   }
0348 
0349   static const BRepGraphInc::ChildRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0350   {
0351     return theGraph.Refs().Children().Entry(theRefId);
0352   }
0353 
0354   static BRepGraph_NodeId ChildIdOf(const BRepGraph&, const BRepGraphInc::ChildRef& theRef)
0355   {
0356     return theRef.ChildNodeId;
0357   }
0358 };
0359 
0360 struct OccurrenceOfProductTraits
0361     : public BaseTraits<BRepGraph_ProductId, BRepGraph_OccurrenceRefId, BRepGraphInc::OccurrenceRef>
0362 {
0363   using ChildId = BRepGraph_OccurrenceId;
0364 
0365   static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0366   {
0367     return theParent.IsValid(theGraph.Topo().Products().Nb()) && !theParent.IsRemoved(theGraph);
0368   }
0369 
0370   static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0371                                                        const ParentId   theParent)
0372   {
0373     return theGraph.Topo().Products().Relations(theParent).OccurrenceRefIds;
0374   }
0375 
0376   static const BRepGraphInc::OccurrenceRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0377   {
0378     return theGraph.Refs().Occurrences().Entry(theRefId);
0379   }
0380 
0381   static BRepGraph_OccurrenceId ChildIdOf(const BRepGraph&,
0382                                           const BRepGraphInc::OccurrenceRef& theRef)
0383   {
0384     return theRef.ChildOccurrenceId;
0385   }
0386 };
0387 
0388 template <typename TraitsT>
0389 class RefsOfParent
0390 {
0391 public:
0392   using ParentId = typename TraitsT::ParentId;
0393   using RefId    = typename TraitsT::RefId;
0394   using ChildId  = typename TraitsT::ChildId;
0395 
0396   RefsOfParent(const BRepGraph& theGraph, const ParentId theParent)
0397       : myGraph(theGraph)
0398   {
0399     if (!TraitsT::IsParentValid(theGraph, theParent))
0400     {
0401       return;
0402     }
0403 
0404     myRefIds = &TraitsT::RefIds(theGraph, theParent);
0405     myLength = static_cast<uint32_t>(myRefIds->Size());
0406     if constexpr (std::is_convertible_v<RefId, BRepGraph_NodeId>)
0407     {
0408       myNbRefs = theGraph.Topo().Gen().Nb(BRepGraph_NodeId(RefId()).NodeKind);
0409     }
0410     else
0411     {
0412       myNbRefs = theGraph.Refs().Gen().Nb(BRepGraph_RefId(RefId()).RefKind);
0413     }
0414 
0415     if constexpr (TraitsT::THE_IS_DIRECT)
0416     {
0417       myNbChildren = myNbRefs;
0418     }
0419     else
0420     {
0421       if constexpr (!std::is_same_v<ChildId, BRepGraph_NodeId>)
0422       {
0423         myNbChildren = theGraph.Topo().Gen().Nb(BRepGraph_NodeId(ChildId()).NodeKind);
0424       }
0425     }
0426     skipRemoved();
0427   }
0428 
0429   [[nodiscard]] bool More() const { return myRefIds != nullptr && myIndex < myLength; }
0430 
0431   void Next()
0432   {
0433     ++myIndex;
0434     // Fast-path: check if the very next element is already valid.
0435     if (myRefIds != nullptr && myIndex < myLength)
0436     {
0437       const RefId aRefId = myRefIds->Value(static_cast<size_t>(myIndex));
0438       if (aRefId.IsValid(myNbRefs) && !aRefId.IsRemoved(myGraph))
0439       {
0440         if constexpr (TraitsT::THE_IS_DIRECT)
0441         {
0442           return;
0443         }
0444         else
0445         {
0446           const typename TraitsT::RefEntry& aRef     = TraitsT::Ref(myGraph, aRefId);
0447           const auto                        aChildId = TraitsT::ChildIdOf(myGraph, aRef);
0448           if constexpr (std::is_same_v<ChildId, BRepGraph_NodeId>)
0449           {
0450             if (myGraph.Topo().Gen().IsActive(aChildId))
0451               return;
0452           }
0453           else if (aChildId.IsValid(myNbChildren) && !aChildId.IsRemoved(myGraph))
0454           {
0455             return;
0456           }
0457         }
0458       }
0459     }
0460     skipRemoved();
0461   }
0462 
0463   [[nodiscard]] RefId CurrentId() const
0464   {
0465     Standard_ASSERT_VOID(More(), "RefsOfParent::CurrentId() called on exhausted iterator");
0466     return myRefIds->Value(static_cast<size_t>(myIndex));
0467   }
0468 
0469   [[nodiscard]] uint32_t Index() const { return myIndex; }
0470 
0471   //! Returns an STL-compatible iterator for range-based for loops.
0472   NCollection_ForwardRangeIterator<RefsOfParent> begin()
0473   {
0474     return NCollection_ForwardRangeIterator<RefsOfParent>(this);
0475   }
0476 
0477   //! Returns a sentinel marking the end of iteration.
0478   NCollection_ForwardRangeSentinel end() const { return NCollection_ForwardRangeSentinel{}; }
0479 
0480 private:
0481   void skipRemoved()
0482   {
0483     while (myRefIds != nullptr && myIndex < myLength)
0484     {
0485       const RefId aRefId = myRefIds->Value(static_cast<size_t>(myIndex));
0486       if (aRefId.IsValid(myNbRefs) && !aRefId.IsRemoved(myGraph))
0487       {
0488         const auto aChildId = [&]() {
0489           if constexpr (TraitsT::THE_IS_DIRECT)
0490           {
0491             return aRefId;
0492           }
0493           else
0494           {
0495             const typename TraitsT::RefEntry& aRef = TraitsT::Ref(myGraph, aRefId);
0496             return TraitsT::ChildIdOf(myGraph, aRef);
0497           }
0498         }();
0499         if constexpr (std::is_same_v<ChildId, BRepGraph_NodeId>)
0500         {
0501           if (myGraph.Topo().Gen().IsActive(aChildId))
0502           {
0503             return;
0504           }
0505         }
0506         else if (aChildId.IsValid(myNbChildren) && !aChildId.IsRemoved(myGraph))
0507         {
0508           return;
0509         }
0510       }
0511       ++myIndex;
0512     }
0513   }
0514 
0515   const BRepGraph&                       myGraph;
0516   const NCollection_LinearVector<RefId>* myRefIds     = nullptr;
0517   uint32_t                               myIndex      = 0;
0518   uint32_t                               myLength     = 0;
0519   uint32_t                               myNbRefs     = 0;
0520   uint32_t                               myNbChildren = 0;
0521 };
0522 
0523 //! @brief Direct active boundary vertex reference ids of an edge.
0524 //!
0525 //! Iteration order is start vertex, then end vertex.
0526 class RefsVertexOfEdge
0527 {
0528 public:
0529   using RefId = BRepGraph_VertexRefId;
0530 
0531   RefsVertexOfEdge(const BRepGraph& theGraph, const BRepGraph_EdgeId theEdgeId)
0532       : myGraph(theGraph)
0533   {
0534     if (!theEdgeId.IsValid(theGraph.Topo().Edges().Nb()) || theEdgeId.IsRemoved(theGraph))
0535     {
0536       return;
0537     }
0538 
0539     myEdge         = &theGraph.Topo().Edges().Definition(theEdgeId);
0540     myLength       = 2u;
0541     myNbVertexRefs = theGraph.Refs().Vertices().Nb();
0542     myNbVertices   = theGraph.Topo().Vertices().Nb();
0543     skipRemoved();
0544   }
0545 
0546   [[nodiscard]] bool More() const { return myEdge != nullptr && myIndex < myLength; }
0547 
0548   void Next()
0549   {
0550     ++myIndex;
0551     skipRemoved();
0552   }
0553 
0554   [[nodiscard]] RefId CurrentId() const { return refIdAt(myIndex); }
0555 
0556   [[nodiscard]] uint32_t Index() const { return myIndex; }
0557 
0558   //! Returns an STL-compatible iterator for range-based for loops.
0559   NCollection_ForwardRangeIterator<RefsVertexOfEdge> begin()
0560   {
0561     return NCollection_ForwardRangeIterator<RefsVertexOfEdge>(this);
0562   }
0563 
0564   //! Returns a sentinel marking the end of iteration.
0565   NCollection_ForwardRangeSentinel end() const { return NCollection_ForwardRangeSentinel{}; }
0566 
0567 private:
0568   [[nodiscard]] RefId refIdAt(const uint32_t theIndex) const
0569   {
0570     if (theIndex == 0)
0571     {
0572       return myEdge->StartVertexRefId;
0573     }
0574     return myEdge->EndVertexRefId;
0575   }
0576 
0577   void skipRemoved()
0578   {
0579     while (myEdge != nullptr && myIndex < myLength)
0580     {
0581       const RefId aRefId = refIdAt(myIndex);
0582       if (aRefId.IsValid(myNbVertexRefs) && !myGraph.Refs().Gen().IsRemoved(aRefId))
0583       {
0584         const BRepGraphInc::VertexRef& aRef = myGraph.Refs().Vertices().Entry(aRefId);
0585         if (!aRef.ChildVertexId.IsValid(myNbVertices) || aRef.ChildVertexId.IsRemoved(myGraph))
0586         {
0587           ++myIndex;
0588           continue;
0589         }
0590         return;
0591       }
0592       ++myIndex;
0593     }
0594   }
0595 
0596   const BRepGraph&             myGraph;
0597   const BRepGraphInc::EdgeDef* myEdge         = nullptr;
0598   uint32_t                     myIndex        = 0;
0599   uint32_t                     myLength       = 0;
0600   uint32_t                     myNbVertexRefs = 0;
0601   uint32_t                     myNbVertices   = 0;
0602 };
0603 
0604 } // namespace BRepGraph_RefsIterator
0605 
0606 using BRepGraph_RefsShellOfSolid =
0607   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::ShellOfSolidTraits>;
0608 using BRepGraph_RefsFaceOfShell =
0609   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::FaceOfShellTraits>;
0610 using BRepGraph_RefsWireOfFace =
0611   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::WireOfFaceTraits>;
0612 using BRepGraph_CoEdgesOfWire =
0613   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::CoEdgeOfWireTraits>;
0614 using BRepGraph_RefsSolidOfCompSolid =
0615   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::SolidOfCompSolidTraits>;
0616 using BRepGraph_RefsChildOfCompound =
0617   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::ChildOfCompoundTraits>;
0618 using BRepGraph_RefsOccurrenceOfProduct =
0619   BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::OccurrenceOfProductTraits>;
0620 using BRepGraph_RefsVertexOfEdge = BRepGraph_RefsIterator::RefsVertexOfEdge;
0621 
0622 using BRepGraph_ShellRefIterator  = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ShellRef>;
0623 using BRepGraph_FaceRefIterator   = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::FaceRef>;
0624 using BRepGraph_WireRefIterator   = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::WireRef>;
0625 using BRepGraph_VertexRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::VertexRef>;
0626 using BRepGraph_SolidRefIterator  = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::SolidRef>;
0627 using BRepGraph_ChildRefIterator  = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ChildRef>;
0628 using BRepGraph_OccurrenceRefIterator =
0629   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::OccurrenceRef>;
0630 
0631 using BRepGraph_FullShellRefIterator =
0632   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ShellRef, true>;
0633 using BRepGraph_FullFaceRefIterator =
0634   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::FaceRef, true>;
0635 using BRepGraph_FullWireRefIterator =
0636   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::WireRef, true>;
0637 using BRepGraph_FullVertexRefIterator =
0638   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::VertexRef, true>;
0639 using BRepGraph_FullSolidRefIterator =
0640   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::SolidRef, true>;
0641 using BRepGraph_FullChildRefIterator =
0642   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ChildRef, true>;
0643 using BRepGraph_FullOccurrenceRefIterator =
0644   BRepGraph_RefsIterator::RefIterator<BRepGraphInc::OccurrenceRef, true>;
0645 
0646 #endif // _BRepGraph_RefsIterator_HeaderFile