DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
MaximalSegments.h
1 
17 #pragma once
18 
31 #if defined(MaximalSegments_RECURSES)
32 #error Recursive header files inclusion detected in MaximalSegments.h
33 #else // defined(MaximalSegments_RECURSES)
34 
35 #define MaximalSegments_RECURSES
36 
37 #if !defined MaximalSegments_h
38 
39 #define MaximalSegments_h
40 
42 // Inclusions
43 #include <iostream>
44 #include "DGtal/base/Common.h"
46 
47 namespace DGtal
48 {
49  namespace deprecated
50  {
52  // template class MaximalSegments
108  template <typename TSegment>
110  {
111 
112  public:
113 
114  typedef TSegment Segment;
115  typedef typename TSegment::Reverse ReverseSegment;
116  typedef typename TSegment::ConstIterator Iterator;
117  typedef typename ReverseSegment::ConstIterator ReverseIterator;
118 
119 
120  // ----------------------- Standard services ------------------------------
121  public:
122 
123 
124 
130  {
131 
132  // ------------------------- private data -----------------------
133  private:
134 
135 
140 
146 
152 
157 
158 
165 
172 
180  bool myFlag;
181 
182  // ------------------------- Standard services -----------------------
183  public:
184  friend class MaximalSegments<Segment>;
185 
194  const Iterator& aBack,
195  const Segment& aSegment);
196 
197 
202  SegmentIterator( const SegmentIterator & aOther );
203 
209  SegmentIterator& operator=( const SegmentIterator & aOther );
210 
215 
216  // ------------------------- iteration services -------------------------
217  public:
218 
222  Segment operator*() const;
223 
227  Segment get() const;
228 
235 
240  bool intersectNext() const;
241 
246  bool intersectPrevious() const;
247 
252  const Iterator getFront() const;
253 
258  const Iterator getBack() const;
259 
260 
261 
270  bool operator==( const SegmentIterator & aOther ) const;
271 
280  bool operator!=( const SegmentIterator & aOther ) const;
281 
282  // ------------------------- hidden services -------------------------
283 
284  private:
285 
293  template <typename TypeSegment, typename TypeIterator>
294  void extension(TypeSegment& aSeg, TypeIterator& it, const TypeIterator& end);
295 
302  template <typename TypeSegment, typename TypeIterator>
303  void extension(TypeSegment& aSeg, TypeIterator& it);
304 
313  template <typename TypeSegment, typename TypeIterator>
314  void extensionInLoop(TypeSegment& aSeg, TypeIterator& it,
315  const TypeIterator& begin, const TypeIterator& end);
316 
317 
318 
323  void firstMaximalSegment();
324 
329  void nextMaximalSegment();
330 
335  bool doesIntersectNext(const Iterator& it);
336 
337  };
338 
339 
340  // ----------------------- Interface --------------------------------------
341  public:
342 
343 
348 
358  MaximalSegments(const Iterator& beginIt,
359  const Iterator& endIt,
360  const Segment& aSegment,
361  const bool& aFlag);
362 
372  void init(const Iterator& beginIt,
373  const Iterator& endIt,
374  const Segment& aSegment,
375  const bool& aFlag);
376 
377 
382 
388 
394 
395 
400  void selfDisplay ( std::ostream & out ) const;
401 
406  bool isValid() const;
407 
408  // ------------------------- Protected Datas ------------------------------
409  private:
410  // ------------------------- Private Datas --------------------------------
411  private:
412 
417 
422 
428 
433 
438  bool isClosed;
439 
440 
441  // ------------------------- Hidden services ------------------------------
442 
443 
444  private:
445 
450  MaximalSegments ( const MaximalSegments & other );
451 
457  MaximalSegments & operator= ( const MaximalSegments & other );
458 
459  // ------------------------- Internals ------------------------------------
460  private:
461 
462  }; // end of class MaximalSegments
463 
464 
471  template <typename TSegment>
472  std::ostream&
473  operator<< ( std::ostream & out, const MaximalSegments<TSegment> & object );
474 
475  } // namespace deprecated
476 } // namespace DGtal
477 
478 
480 // Includes inline functions.
481 #include "DGtal/geometry/curves/MaximalSegments.ih"
482 
483 // //
485 
486 #endif // !defined MaximalSegments_h
487 
488 #undef MaximalSegments_RECURSES
489 #endif // else defined(MaximalSegments_RECURSES)