1 // Copyright (c) 1997-2002  Max-Planck-Institute Saarbruecken (Germany).
2 // All rights reserved.
3 //
4 // This file is part of CGAL (www.cgal.org).
5 //
6 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Nef_3/include/CGAL/Nef_3/Volume.h $
7 // $Id: Volume.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot
8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
9 //
10 //
11 // Author(s)     : Michael Seel        <seel@mpi-sb.mpg.de>
12 //                 Miguel Granados     <granados@mpi-sb.mpg.de>
13 //                 Susan Hert          <hert@mpi-sb.mpg.de>
14 //                 Lutz Kettner        <kettner@mpi-sb.mpg.de>
15 //                 Peter Hachenberger  <hachenberger@mpi-sb.mpg.de>
16 #ifndef CGAL_NEF_VOLUME_H
17 #define CGAL_NEF_VOLUME_H
18 
19 #include <CGAL/license/Nef_3.h>
20 
21 
22 #include <string>
23 #include <sstream>
24 #include <CGAL/IO/Verbose_ostream.h>
25 #include <CGAL/Nef_3/SNC_iteration.h>
26 
27 #undef CGAL_NEF_DEBUG
28 #define CGAL_NEF_DEBUG 83
29 #include <CGAL/Nef_2/debug.h>
30 
31 namespace CGAL {
32 
33 template <typename Refs>
34 class Volume_base  {
35 
36   typedef typename Refs::Mark  Mark;
37   typedef typename Refs::Volume_handle  Volume_handle;
38   typedef typename Refs::Volume_const_handle  Volume_const_handle;
39   typedef typename Refs::Object_list   Object_list;
40   typedef typename Refs::Shell_entry_iterator
41     Shell_entry_iterator;
42   typedef typename Refs::Shell_entry_const_iterator
43     Shell_entry_const_iterator;
44 
45   Mark         mark_;
46   Object_list shell_entry_objects_; // SFaces
47 
48  public:
49 
Volume_base()50   Volume_base() {}
51 
Volume_base(Mark m)52   Volume_base(Mark m) : mark_(m) {}
53 
~Volume_base()54     ~Volume_base() {
55       CGAL_NEF_TRACEN("  destroying Volume_base item "<<&*this);
56     }
57 
Volume_base(const Volume_base<Refs> & v)58     Volume_base(const Volume_base<Refs>& v)
59       { mark_ = v.mark_;
60         shell_entry_objects_ = v.shell_entry_objects_;
61       }
62 
63     Volume_base<Refs>& operator=(const Volume_base<Refs>& v)
64       { if (this == &v) return *this;
65         mark_ = v.mark_;
66         shell_entry_objects_ = v.shell_entry_objects_;
67         return *this;
68       }
69 
mark()70     Mark& mark() { return mark_; }
mark()71     const Mark& mark() const { return mark_; }
72 
shell_entry_objects()73     Object_list& shell_entry_objects() { return shell_entry_objects_; }
shell_entry_objects()74     const Object_list& shell_entry_objects() const {
75       return shell_entry_objects_;
76     }
77 
shells_begin()78     Shell_entry_iterator shells_begin()
79     { return shell_entry_objects_.begin(); }
shells_end()80     Shell_entry_iterator shells_end()
81     { return shell_entry_objects_.end(); }
shells_begin()82     Shell_entry_const_iterator shells_begin() const
83     { return shell_entry_objects_.begin(); }
shells_end()84     Shell_entry_const_iterator shells_end() const
85     { return shell_entry_objects_.end(); }
86 
87     bool is_valid( bool verb = false, int level = 0) const {
88 
89       Verbose_ostream verr(verb);
90       verr << "begin CGAL::SNC_items<...>::Volume_base::is_valid( verb=true, "
91         "level = " << level << "):" << std::endl;
92 
93       bool valid = (!shell_entry_objects_.empty());
94 
95       verr << "end of CGAL::SNC_items<...>::Volume_base::is_valid(): structure is "
96            << ( valid ? "valid." : "NOT VALID.") << std::endl;
97 
98       return valid;
99     }
100 
101 }; // Volume_base
102 
103 } //namespace CGAL
104 #endif //CGAL_NEF_VOLUME_H
105