1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-07-30 13:05:50 +03:00
occt/src/Poly/Poly_CoherentTriPtr.hxx
abv 857ffd5e57 0024814: Avoid using explicit names of Handle classes
Sources corrected replacing Handle_XXX by Handle(XXX)
2014-04-22 18:36:12 +04:00

185 lines
5.5 KiB
C++

// Created on: 2007-12-08
// Created by: Alexander GRIGORIEV
// Copyright (c) 2007-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef Poly_CoherentTriPtr_HeaderFile
#define Poly_CoherentTriPtr_HeaderFile
#include <NCollection_BaseAllocator.hxx>
#include <NCollection_DefineAlloc.hxx>
class Poly_CoherentTriangle;
#ifdef WNT
#pragma warning (push)
#pragma warning(disable:4355) //'this' : used in base member initializer list
#endif
/**
* Implementation of both list node for Poly_CoherentTriangle type and
* round double-linked list of these nodes.
*/
class Poly_CoherentTriPtr
{
public:
/**
* Iterator class for this list of triangles. Because the list is round,
* an iteration can be started from any member and it finishes before taking
* this member again. The iteration sense is always forward (Next).
*/
class Iterator {
public:
//! Empty constructor
inline Iterator ()
: myFirst (0L),
myCurrent (0L)
{}
//! Constructor
inline Iterator (const Poly_CoherentTriPtr& thePtr)
: myFirst (&thePtr),
myCurrent (&thePtr)
{}
//! Query the triangle that started the current iteration.
inline const Poly_CoherentTriangle * First () const
{ return myFirst ? &myFirst->GetTriangle() : 0L; }
//! Query if there is available triangle pointer on this iteration
inline Standard_Boolean More () const
{ return myCurrent != 0L; }
//! Go to the next iteration.
Standard_EXPORT void Next ();
//! Get the current iterated triangle
inline const Poly_CoherentTriangle& Value () const
{ return myCurrent->GetTriangle(); }
//! Get the current iterated triangle (mutable)
inline Poly_CoherentTriangle& ChangeValue () const
{ return const_cast<Poly_CoherentTriangle&>(myCurrent->GetTriangle()); }
//! Get the current iterated pointer to triangle
inline const Poly_CoherentTriPtr& PtrValue() const
{ return * myCurrent; }
private:
const Poly_CoherentTriPtr * myFirst;
const Poly_CoherentTriPtr * myCurrent;
};
// ---------- PUBLIC METHODS ----------
/**
* Constructor.
*/
inline Poly_CoherentTriPtr (const Poly_CoherentTriangle& theTri)
: mypTriangle (&theTri),
myNext (this),
myPrevious (this)
{}
/**
* Operator new for dynamic allocations
*/
DEFINE_NCOLLECTION_ALLOC
/**
* Query the stored pointer to Triangle.
*/
inline const Poly_CoherentTriangle&
GetTriangle () const
{ return * mypTriangle; }
/**
* Initialize this instance with a pointer to triangle.
*/
inline void SetTriangle (const Poly_CoherentTriangle * pTri)
{ mypTriangle = pTri; }
/**
* Query the next pointer in the list.
*/
inline Poly_CoherentTriPtr&
Next () const
{ return * myNext; }
/**
* Query the previous pointer in the list.
*/
inline Poly_CoherentTriPtr&
Previous () const
{ return * myPrevious; }
/**
* Append a pointer to triangle into the list after the current instance.
* @param pTri
* Triangle that is to be included in the list after this one.
* @param theA
* Allocator where the new pointer instance is created.
*/
Standard_EXPORT void Append (const Poly_CoherentTriangle * pTri,
const Handle(NCollection_BaseAllocator)& theA);
/**
* Prepend a pointer to triangle into the list before the current instance.
* @param pTri
* Triangle that is to be included in the list before this one.
* @param theA
* Allocator where the new pointer instance is created.
*/
Standard_EXPORT void Prepend (const Poly_CoherentTriangle * pTri,
const Handle(NCollection_BaseAllocator)& theA);
/**
* Remove a pointer to triangle from its list.
* @param thePtr
* This class instance that should be removed from its list.
* @param theA
* Allocator where the current pointer instance was created.
*/
Standard_EXPORT static void
Remove (Poly_CoherentTriPtr * thePtr,
const Handle(NCollection_BaseAllocator)& theA);
/**
* Remove the list containing the given pointer to triangle.
*/
Standard_EXPORT static void
RemoveList (Poly_CoherentTriPtr * thePtr,
const Handle(NCollection_BaseAllocator)&);
protected:
// ---------- PROTECTED METHODS ----------
/**
* Constructor.
*/
inline Poly_CoherentTriPtr (const Poly_CoherentTriangle * pTri)
: mypTriangle (pTri),
myNext (this),
myPrevious (this)
{}
private:
// ---------- PRIVATE FIELDS ----------
const Poly_CoherentTriangle * mypTriangle;
Poly_CoherentTriPtr * myNext;
Poly_CoherentTriPtr * myPrevious;
friend class Iterator;
};
#ifdef WNT
#pragma warning (pop)
#endif
#endif