⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 consolidated_curve_data_aux.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2005  Tel-Aviv University (Israel).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Arrangement_2/include/CGAL/Arr_traits_2/Consolidated_curve_data_aux.h $// $Id: Consolidated_curve_data_aux.h 28567 2006-02-16 14:30:13Z lsaboret $// //// Author(s)     : Ron Wein          <wein@post.tau.ac.il>//                 Efi Fogel         <efif@post.tau.ac.il>#ifndef CGAL_CONSOLIDATED_CURVE_DATA_AUX_H#define CGAL_CONSOLIDATED_CURVE_DATA_AUX_H/*! \file * Definition of auxiliary classes for the usage of the * Arr_consolidated_curve_data_traits_2<Traits,Data> class. */CGAL_BEGIN_NAMESPACE/*! \class * Representation of a set of data objects (without duplicates), using a * simple list. */template <class Data_>class _Unique_list{public:  typedef Data_                Data;  typedef _Unique_list<Data>   Self;  typedef typename std::list<Data>::const_iterator  const_iterator;private:    std::list<Data>     m_list;public:  /*! Default constructor. */  _Unique_list () :    m_list()  {}  /*! Construct a singleton list. */  _Unique_list (const Data& data) :    m_list ()  {    m_list.push_back (data);  }  /*! Go over the data objects in list. */  const_iterator begin () const  {    return (m_list.begin());  }  const_iterator end () const  {    return (m_list.end());  }  /*! Get the list size. */  std::size_t size () const  {    return (m_list.size());  }  /*! Get the first (or last) data object. */  const Data& front () const  {    return (m_list.front());  }  const Data& back () const  {    return (m_list.back());  }  /*! Equality operator. */  bool operator== (const Self& other) const  {    if (size() != other.size())      return (false);    const_iterator    iter;    for (iter = begin(); iter != end(); ++iter)    {      if (other.find (*iter) == other.end())        return (false);    }    for (iter = other.begin(); iter != other.end(); ++iter)    {      if (find (*iter) == end())        return (false);    }    return (true);  }  /*!   * Find the given data object is contained in the list.   * \param data The data object.   * \return An iterator for the data object, or end() if it is not found.   */  const_iterator find (const Data& data) const  {    const_iterator   iter = m_list.begin();    while (iter != m_list.end())    {      if (*iter == data)        break;      ++iter;    }    return (iter);  }    /*!   * Insert an object into the list.    * \param data The data object.   * \return (true) if the data object has been successfully inserted;   *         (false) otherwise (if it already exists).   */  bool insert (const Data& data)  {    if (find (data) != m_list.end())      return (false);    m_list.push_back (data);    return (true);  }    /*!   * Erase an object from the list.    * \param data The data object.   * \return (true) if the data object has been successfully erased;   *         (false) otherwise (if it is not in the list).   */  bool erase (const Data& data)  {    typename std::list<Data>::iterator  iter = m_list.begin();    while (iter != m_list.end())    {      if (*iter == data)      {        // Erase the current data object.        m_list.erase (iter);        return (true);      }      ++iter;    }    // The data object is not found in the list:    return (false);  }  /*! Clear the list. */  void clear ()  {    m_list.clear();    return;  }};/*! \struct * A functor for consolidating two unique lists. */template <class Data>struct _Consolidate_unique_lists{  _Unique_list<Data> operator() (const _Unique_list<Data>& list1,                                 const _Unique_list<Data>& list2) const  {    _Unique_list<Data>  result = list1;    typename _Unique_list<Data>::const_iterator  iter;    for (iter = list2.begin(); iter != list2.end(); ++iter)      result.insert (*iter);    return (result);  }};CGAL_END_NAMESPACE#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -