search/mag_sel search/close
NodeCollection.h
1 // Copyright 2001-2021 Aspose Pty Ltd. All Rights Reserved.
3 //
4 // This file is part of Aspose.Words. The source code in this file
5 // is only intended as a supplement to the documentation, and is provided
6 // "as is", without warranty of any kind, either expressed or implied.
9 #pragma once
10 
11 #include <system/enumerator_adapter.h>
12 #include <system/collections/list.h>
13 #include <system/collections/ienumerable.h>
14 
15 #include <Aspose.Words.Cpp/NodeCollectionEnumerator.h>
16 #include <Aspose.Words.Cpp/Node.h>
17 #include <Aspose.Words.Cpp/INodeCollection.h>
18 #include <Aspose.Words.Cpp/aspose_words_api_defs.h>
19 
20 namespace System { namespace Collections { namespace Generic { template <typename> class IEnumerator; } } }
21 namespace Aspose { namespace Words { class ImportInfoCollector; } }
22 namespace Aspose { namespace Words { namespace Markup { class StructuredDocumentTagRangeStart; } } }
23 namespace Aspose { namespace Words { namespace Revisions { class MoveRangeRevisionHelper; } } }
24 namespace Aspose { namespace Words { class CommentCollection; } }
25 namespace Aspose { namespace Words { class CompositeNode; } }
26 namespace Aspose { namespace Words { namespace Validation { namespace VmlToDml { class VmlShapeToDmlShapeConverter; } } } }
27 namespace Aspose { namespace Words { namespace Drawing { class ShapeCollection; } } }
28 namespace Aspose { namespace Words { namespace Revisions { class RevisionUtil; } } }
29 namespace Aspose { namespace Words { namespace Revisions { class BookmarkDeleter; } } }
30 namespace Aspose { namespace Words { class RevisionCollection; } }
31 namespace Aspose { namespace Words { namespace BuildingBlocks { class BuildingBlockCollection; } } }
32 namespace Aspose { namespace Words { namespace Rendering { class ThumbnailGenerator; } } }
33 namespace Aspose { namespace Words { namespace Fields { class NewResultEnumerator; } } }
34 namespace Aspose { namespace Words { namespace Fields { class FormFieldCollection; } } }
35 namespace Aspose { namespace Words { class Document; } }
36 namespace Aspose { namespace Words { class HeaderFooterCollection; } }
37 namespace Aspose { namespace Words { class SectionCollection; } }
38 namespace Aspose { namespace Words { namespace Tables { class CellCollection; } } }
39 namespace Aspose { namespace Words { namespace Tables { class RowCollection; } } }
40 namespace Aspose { namespace Words { namespace Tables { class TableCollection; } } }
41 namespace Aspose { namespace Words { class Comment; } }
42 namespace Aspose { namespace Words { class ParagraphCollection; } }
43 namespace Aspose { namespace Words { class RunCollection; } }
44 namespace Aspose { namespace Words { namespace RW { namespace Odt { namespace Writer { class OdtTextPropertiesWriter; } } } } }
45 namespace Aspose { namespace Words { class DocumentBase; } }
46 namespace Aspose { namespace Words { class NodeMatcher; } }
47 namespace Aspose { namespace Words { enum class NodeType; } }
48 
49 namespace Aspose {
50 
51 namespace Words {
52 
119 class ASPOSE_WORDS_SHARED_CLASS NodeCollection : public Aspose::Words::INodeCollection, public System::Collections::Generic::IEnumerable<System::SharedPtr<Aspose::Words::Node>>
120 {
121  typedef NodeCollection ThisType;
122  typedef Aspose::Words::INodeCollection BaseType;
124 
125  typedef ::System::BaseTypesInfo<BaseType, BaseType1> ThisTypeBaseTypesInfo;
126  ASPOSE_WORDS_SHARED_RTTI_INFO_DECL();
127 
128  friend class Aspose::Words::ImportInfoCollector;
130  friend class Aspose::Words::Revisions::MoveRangeRevisionHelper;
132  friend class Aspose::Words::CompositeNode;
133  friend class Aspose::Words::Validation::VmlToDml::VmlShapeToDmlShapeConverter;
134  friend class Aspose::Words::Drawing::ShapeCollection;
135  friend class Aspose::Words::Revisions::RevisionUtil;
136  friend class Aspose::Words::Revisions::BookmarkDeleter;
139  friend class Aspose::Words::Rendering::ThumbnailGenerator;
140  friend class Aspose::Words::Fields::NewResultEnumerator;
142  friend class Aspose::Words::Document;
148  friend class Aspose::Words::Comment;
150  friend class Aspose::Words::RunCollection;
151  friend class Aspose::Words::RW::Odt::Writer::OdtTextPropertiesWriter;
152 
153 public:
154 
283  ASPOSE_WORDS_SHARED_API int32_t get_Count();
285 
347  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> idx_get(int32_t index);
348 
390  ASPOSE_WORDS_SHARED_API void Add(System::SharedPtr<Aspose::Words::Node> node);
391 
445  ASPOSE_WORDS_SHARED_API void Insert(int32_t index, System::SharedPtr<Aspose::Words::Node> node);
446 
483  ASPOSE_WORDS_SHARED_API void Remove(System::SharedPtr<Aspose::Words::Node> node);
484 
520  ASPOSE_WORDS_SHARED_API void RemoveAt(int32_t index);
521 
541  ASPOSE_WORDS_SHARED_API void Clear();
542 
583  ASPOSE_WORDS_SHARED_API bool Contains(System::SharedPtr<Aspose::Words::Node> node);
584 
612  ASPOSE_WORDS_SHARED_API int32_t IndexOf(System::SharedPtr<Aspose::Words::Node> node);
613 
673 
679  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> GetCurrentNode() override;
680 
681 protected:
682 
684 
685  MEMBER_FUNCTION_MAKE_OBJECT_DECLARATION(NodeCollection, CODEPORTING_ARGS(System::SharedPtr<Aspose::Words::CompositeNode> container, Aspose::Words::NodeType nodeType, bool isDeep));
686 
688 
689  MEMBER_FUNCTION_MAKE_OBJECT_DECLARATION(NodeCollection, CODEPORTING_ARGS(System::SharedPtr<Aspose::Words::CompositeNode> container, System::ArrayPtr<Aspose::Words::NodeType> nodeTypes, bool isDeep));
690 
692 
693  MEMBER_FUNCTION_MAKE_OBJECT_DECLARATION(NodeCollection, CODEPORTING_ARGS(System::SharedPtr<Aspose::Words::CompositeNode> container, System::SharedPtr<Aspose::Words::NodeMatcher> matcher, bool isDeep));
694  template <typename TNode>
696  {
697  typedef Aspose::Words::Node BaseT_Node;
698  assert_is_base_of(BaseT_Node, TNode);
699 
700  return System::MakeObject<Aspose::Words::NodeCollectionEnumerator<TNode>>(System::MakeSharedPtr(this));
701  }
702 
704  template <typename TValue>
706  {
707  typedef Aspose::Words::Node BaseT_Node;
708  assert_is_base_of(BaseT_Node, TValue);
709 
710  System::SharedPtr<System::Collections::Generic::List<TValue>> result = System::MakeObject<System::Collections::Generic::List<TValue>>();
711  for (const auto& node : System::IterateOver(this))
712  {
713  result->Add(System::StaticCast<typename TValue::Pointee_>(node));
714  }
715  return result;
716  }
717 
718  System::SharedPtr<Aspose::Words::Node> GetNthMatchingNode(System::SharedPtr<Aspose::Words::Node> startNode, int32_t count);
719 
720  virtual ASPOSE_WORDS_SHARED_API ~NodeCollection();
721 
722 private:
723 
724  int32_t get_DocumentTreeChangeCount();
725 
729  bool mIsDeep;
730  int32_t mInitialChangeCount;
731  int32_t mCurIndex;
733  int32_t mCount;
735 
737  System::SharedPtr<Aspose::Words::Node> FindMatchingNode(System::SharedPtr<Aspose::Words::Node> curNode, bool isForward);
740  System::SharedPtr<Aspose::Words::Node> TraverseFlatSkipMarkupNodes(bool isForward, System::SharedPtr<Aspose::Words::Node> node);
741  void CheckInvalidate();
742  void Invalidate();
743 
744 };
745 
746 }
747 }