File indexing completed on 2024-12-08 03:45:05

0001 /*
0002     This file is part of the syndication library
0003     SPDX-FileCopyrightText: 2006 Frank Osterfeld <osterfeld@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef SYNDICATION_RDF_SEQUENCE_H
0009 #define SYNDICATION_RDF_SEQUENCE_H
0010 
0011 #include "../syndication_export.h"
0012 #include "resource.h"
0013 
0014 template<class T>
0015 class QList;
0016 
0017 namespace Syndication
0018 {
0019 namespace RDF
0020 {
0021 //@cond PRIVATE
0022 class Sequence;
0023 typedef QSharedPointer<Sequence> SequencePtr;
0024 //@endcond
0025 
0026 /**
0027  * Sequence container, a sequence contains an ordered list
0028  * of RDF nodes. (opposed to the usually unordered graph
0029  * structure)
0030  */
0031 class Sequence : public Resource
0032 {
0033 public:
0034     /**
0035      * creates a null sequence
0036      */
0037     Sequence();
0038 
0039     /**
0040      * creates a sequence with the given URI. Do not use this directly,
0041      * use Model::createSequence() instead.
0042      */
0043     explicit Sequence(const QString &uri);
0044 
0045     /**
0046      * copies a sequence
0047      *
0048      * @param other sequence
0049      */
0050     Sequence(const Sequence &other);
0051 
0052     /**
0053      * destructor
0054      */
0055     ~Sequence() override;
0056 
0057     /**
0058      * assigns another sequence
0059      *
0060      * @param other the sequence to assign
0061      */
0062     virtual Sequence &operator=(const Sequence &other);
0063 
0064     /**
0065      * Used by visitors for double dispatch. See NodeVisitor
0066      * for more information.
0067      * @param visitor the visitor calling the method
0068      * @param ptr a shared pointer object for this node
0069      */
0070     void accept(NodeVisitor *visitor, NodePtr ptr) override;
0071 
0072     /**
0073      * creates a copy of the sequence
0074      */
0075     Sequence *clone() const override;
0076 
0077     /**
0078      * appends a node at the end of the sequence
0079      *
0080      * @param node the RDF node to append to the sequence
0081      */
0082     virtual void append(NodePtr node);
0083 
0084     /**
0085      * the list of the list items in the sequence, in the
0086      * specified order
0087      */
0088     virtual QList<NodePtr> items() const;
0089 
0090     /**
0091      * returns @p true
0092      */
0093     bool isSequence() const override;
0094 
0095 private:
0096     class SequencePrivate;
0097     QSharedPointer<SequencePrivate> d;
0098 };
0099 
0100 } // namespace RDF
0101 } // namespace Syndication
0102 
0103 #endif // SYNDICATION_RDF_SEQUENCE_H