+//-----------------------------------------------------------------------------
+/**
+ * \brief
+ * DocEntrySet is an abstract base class for ElementSet, SQItem
+ * which are both containers for DocEntries.
+ * - ElementSet is based on the STL map<> container
+ * (see ElementSet::TagHT)
+ * - SQItem is based on an STL list container (see ListDocEntry).
+ *
+ * Since the syntax for adding a new element to a map<> or a list<>
+ * differ, DocEntrySet is designed as an adapter to unify the
+ * interfaces of DocEntrySet and ElementSet.
+ *
+ * As an illustration of this design, please refer to the implementation
+ * of AddEntry (or any pure virtual method) in both derived classes.
+ * This adapter unification of interfaces enables the parsing of a
+ * DICOM header containing (optionaly heavily nested) sequences to be
+ * written recursively [see Document::ParseDES
+ * which calls Document::ParseSQ, which in turn calls
+ * Document::ParseDES ].
+ *
+ * \note Developpers should strongly resist to the temptation of adding
+ * members to this class since this class is designed as an adapter
+ * in the form of an abstract base class.
+ */
+class GDCM_EXPORT DocEntrySet : public RefCounter
+{
+ gdcmTypeMacro(DocEntrySet);