summaryrefslogtreecommitdiff
path: root/inc/NIS_ObjectsIterator.hxx
blob: 58421de3d80584ef542ba0e8d701c1cbbf76be5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// File:      NIS_ObjectsIterator.hxx
// Created:   02.09.07 23:47
// Author:    Alexander GRIGORIEV
// Copyright: Open Cascade 2007


#ifndef NIS_ObjectsIterator_HeaderFile
#define NIS_ObjectsIterator_HeaderFile

#include <NCollection_Vector.hxx>
#include <Handle_NIS_InteractiveObject.hxx>

class Handle_NIS_InteractiveContext;

/**
 * Iterator of objects contained in a NIS_InteractiveContext instance. The
 * iteration is always in the ascending sense of object ID. Examples:
 * @code
 *    // Erase all objects in the Context
 * NIS_ObjectsIterator anIter (myContext);
 * for (; anIter.More(); anIter.Next())
 *   myContext->Erase (anIter.Value(), Standard_False);
 *
 *    // Set object attributes to their IDs (hardly useful outside the example)
 * anIter.Initialize (myContext);
 * Handle(NIS_InteractiveObject) anObj;
 * while (!(anObj = anIter.Value().IsNull())) {
 *   anObj->SetAttribute (static_cast<void *> (anObj->ID()));
 *   anIter.Next();
 * }
 * @endcode
 */

class NIS_ObjectsIterator 
{
 public:
  // ---------- PUBLIC METHODS ----------


  /**
   * Empty Constructor.
   */
  inline NIS_ObjectsIterator    () {}

  /**
   * Constructor.
   * @param theCtx
   *   Interactive context that is to be iterated for all objects.
   */
  inline NIS_ObjectsIterator    (const Handle_NIS_InteractiveContext& theCtx)
  { Initialize (theCtx); }

  /**
   * Reset the Iterator to start the iterations of objects.
   * @param theCtx
   *   Interactive context that is to be iterated for all objects.
   */
  Standard_EXPORT void          Initialize
                                (const Handle_NIS_InteractiveContext& theCtx);

  /**
   * Query if the Iterator has an object (not yet finished the iteration
   * process).
   */
  inline Standard_Boolean       More    () const
  { return myIter.More(); }

  /**
   * Returns the current object at the iteration pointer. If the iteration is
   * over (More() == False) this method returns NULL Handle.
   */
  Standard_EXPORT const Handle_NIS_InteractiveObject&
                                Value   () const;

  /**
   * Step forward to the next valid InteractiveObject instance.
   */
  Standard_EXPORT void          Next    ();

 protected:
  // ---------- PROTECTED FIELDS ----------

  NCollection_Vector <Handle_NIS_InteractiveObject>::Iterator myIter;

};

#endif