diff options
| author | Jenkins CI <null@kde.org> | 2013-12-18 00:45:18 +0000 | 
|---|---|---|
| committer | Jenkins CI <null@kde.org> | 2013-12-18 00:45:18 +0000 | 
| commit | 867e7a50e6396338ab4fe9aa22ad141e4cd344d2 (patch) | |
| tree | 1d6f8d6c912fa04dc268b5580bcfe696fa538743 /src/core/kconfigdata.h | |
| parent | c38b88497a833e482e6892b72c8f52adec6de857 (diff) | |
| download | kconfig-867e7a50e6396338ab4fe9aa22ad141e4cd344d2.tar.gz kconfig-867e7a50e6396338ab4fe9aa22ad141e4cd344d2.tar.bz2 | |
Move kconfig code to the root directory.
Diffstat (limited to 'src/core/kconfigdata.h')
| -rw-r--r-- | src/core/kconfigdata.h | 237 | 
1 files changed, 237 insertions, 0 deletions
| diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h new file mode 100644 index 00000000..f7ad81b9 --- /dev/null +++ b/src/core/kconfigdata.h @@ -0,0 +1,237 @@ +/* +   This file is part of the KDE libraries +   Copyright (c) 2006, 2007 Thomas Braxton <kde.braxton@gmail.com> +   Copyright (c) 1999-2000 Preston Brown <pbrown@kde.org> +   Copyright (C) 1996-2000 Matthias Kalle Dalheimer <kalle@kde.org> + +   This library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Library General Public +   License as published by the Free Software Foundation; either +   version 2 of the License, or (at your option) any later version. + +   This library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Library General Public License for more details. + +   You should have received a copy of the GNU Library General Public License +   along with this library; see the file COPYING.LIB.  If not, write to +   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +   Boston, MA 02110-1301, USA. +*/ + +#ifndef KCONFIGDATA_H +#define KCONFIGDATA_H + +#include <QtCore/QByteArray> +#include <QtCore/QString> +#include <QtCore/QMap> +#include <QtCore/QDebug> + +/** + * map/dict/list config node entry. + * @internal + */ +struct KEntry +{ +  /** Constructor. @internal */ +  KEntry() +    : mValue(), bDirty(false), +      bGlobal(false), bImmutable(false), bDeleted(false), bExpand(false), bReverted(false) {} +  /** @internal */ +  QByteArray mValue; +  /** +   * Must the entry be written back to disk? +   */ +  bool    bDirty :1; +  /** +   * Entry should be written to the global config file +   */ +  bool    bGlobal:1; +  /** +   * Entry can not be modified. +   */ +  bool    bImmutable:1; +  /** +   * Entry has been deleted. +   */ +  bool    bDeleted:1; +  /** +   * Whether to apply dollar expansion or not. +   */ +  bool    bExpand:1; +  /** +   * Entry has been reverted to its default value (from a more global file). +   */ +  bool    bReverted:1; +}; + +// These operators are used to check whether an entry which is about +// to be written equals the previous value. As such, this intentionally +// omits the dirty flag from the comparison. +inline bool operator ==(const KEntry &k1, const KEntry &k2) +{ +    return k1.bGlobal == k2.bGlobal && k1.bImmutable == k2.bImmutable +           && k1.bDeleted == k2.bDeleted && k1.bExpand == k2.bExpand +           && k1.mValue == k2.mValue; +} + +inline bool operator !=(const KEntry &k1, const KEntry &k2) +{ +    return !(k1 == k2); +} + +/** + * key structure holding both the actual key and the group + * to which it belongs. + * @internal + */ +struct KEntryKey +{ +  /** Constructor. @internal */ +  KEntryKey(const QByteArray& _group = QByteArray(), +	    const QByteArray& _key = QByteArray(), bool isLocalized=false, bool isDefault=false) +      : mGroup(_group), mKey(_key), bLocal(isLocalized), bDefault(isDefault), bRaw(false) +      { ; } +  /** +   * The "group" to which this EntryKey belongs +   */ +  QByteArray mGroup; +  /** +   * The _actual_ key of the entry in question +   */ +  QByteArray mKey; +  /** +   * Entry is localised or not +   */ +  bool    bLocal  :1; +  /** +   * Entry indicates if this is a default value. +   */ +  bool    bDefault:1; +  /** @internal +   * Key is a raw unprocessed key. +   * @warning this should only be set during merging, never for normal use. +   */ +  bool    bRaw:1; +}; + +/** + * Compares two KEntryKeys (needed for QMap). The order is localized, localized-default, + * non-localized, non-localized-default + * @internal + */ +inline bool operator <(const KEntryKey &k1, const KEntryKey &k2) +{ +    int result = qstrcmp(k1.mGroup, k2.mGroup); +    if (result != 0) { +        return result < 0; +    } + +    result = qstrcmp(k1.mKey, k2.mKey); +    if (result != 0) { +        return result < 0; +    } + +    if (k1.bLocal != k2.bLocal) +        return k1.bLocal; +    return (!k1.bDefault && k2.bDefault); +} + + +QDebug operator<<(QDebug dbg, const KEntryKey& key); +QDebug operator<<(QDebug dbg, const KEntry& entry); + +/** + * \relates KEntry + * type specifying a map of entries (key,value pairs). + * The keys are actually a key in a particular config file group together + * with the group name. + * @internal + */ +class KEntryMap : public QMap<KEntryKey, KEntry> +{ +    public: +        enum SearchFlag { +            SearchDefaults=1, +            SearchLocalized=2 +        }; +        Q_DECLARE_FLAGS(SearchFlags, SearchFlag) + +        enum EntryOption { +            EntryDirty=1, +            EntryGlobal=2, +            EntryImmutable=4, +            EntryDeleted=8, +            EntryExpansion=16, +            EntryRawKey=32, +            EntryDefault=(SearchDefaults<<16), +            EntryLocalized=(SearchLocalized<<16) +        }; +        Q_DECLARE_FLAGS(EntryOptions, EntryOption) + +        Iterator findExactEntry(const QByteArray& group, const QByteArray& key = QByteArray(), +                           SearchFlags flags = SearchFlags()); + +        Iterator findEntry(const QByteArray& group, const QByteArray& key = QByteArray(), +                           SearchFlags flags = SearchFlags()); + +        ConstIterator findEntry(const QByteArray& group, const QByteArray& key = QByteArray(), +                                SearchFlags flags = SearchFlags()) const; + +        /** +         * Returns true if the entry gets dirtied or false in other case +         */ +        bool setEntry(const QByteArray& group, const QByteArray& key, +                      const QByteArray& value, EntryOptions options); + +        void setEntry(const QByteArray& group, const QByteArray& key, +                      const QString & value, EntryOptions options) +        { +            setEntry(group, key, value.toUtf8(), options); +        } + +        QString getEntry(const QByteArray& group, const QByteArray& key, +                         const QString & defaultValue = QString(), +                         SearchFlags flags = SearchFlags(), +                         bool * expand=0) const; + +        bool hasEntry(const QByteArray& group, const QByteArray& key = QByteArray(), +                      SearchFlags flags = SearchFlags()) const; + +        bool getEntryOption(const ConstIterator& it, EntryOption option) const; +        bool getEntryOption(const QByteArray& group, const QByteArray& key, +                            SearchFlags flags, EntryOption option) const +        { +            return getEntryOption(findEntry(group, key, flags), option); +        } + +        void setEntryOption(Iterator it, EntryOption option, bool bf); +        void setEntryOption(const QByteArray& group, const QByteArray& key, SearchFlags flags, +                            EntryOption option, bool bf) +        { +            setEntryOption(findEntry(group, key, flags), option, bf); +        } + +        bool revertEntry(const QByteArray& group, const QByteArray& key, SearchFlags flags=SearchFlags()); +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(KEntryMap::SearchFlags) +Q_DECLARE_OPERATORS_FOR_FLAGS(KEntryMap::EntryOptions) + +/** + * \relates KEntry + * type for iterating over keys in a KEntryMap in sorted order. + * @internal + */ +typedef QMap<KEntryKey, KEntry>::Iterator KEntryMapIterator; + +/** + * \relates KEntry + * type for iterating over keys in a KEntryMap in sorted order. + * It is const, thus you cannot change the entries in the iterator, + * only examine them. + * @internal + */ +typedef QMap<KEntryKey, KEntry>::ConstIterator KEntryMapConstIterator; + +#endif | 
