⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elem_set.hh

📁 xorp源码hg
💻 HH
字号:
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-// vim:set sts=4 ts=8:// Copyright (c) 2001-2007 International Computer Science Institute//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the "Software")// to deal in the Software without restriction, subject to the conditions// listed in the XORP LICENSE file. These conditions include: you must// preserve this copyright notice, and you cannot mention the copyright// holders in advertising related to the Software without their permission.// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This// notice is a summary of the XORP LICENSE file; the license in that file is// legally binding.// $XORP: xorp/policy/common/elem_set.hh,v 1.9 2007/02/16 22:47:01 pavlin Exp $#ifndef __POLICY_COMMON_ELEM_SET_HH__#define __POLICY_COMMON_ELEM_SET_HH__#include "element_base.hh"#include "element.hh"#include <string>#include <set>/** * @short A set of elements. * * All sets hold a string representation of the elements. All type information * will be lost, as elements will all be promoted to strings. */template <class T> class ElemSetAny : public Element {public:    typedef set<T> Set;    typedef typename Set::iterator iterator;    typedef typename Set::const_iterator const_iterator;    static const char* id;    static Hash _hash;    void set_hash(const Hash& x);    Hash hash() const;        ElemSetAny(const Set& val);    /**     * @param c_str initialize from string in the form element1,element2,...     */    ElemSetAny(const char* c_str);    ElemSetAny();    /**     * @return string representation of set.     */    string str() const;    /**     * @param s element to insert.     */    void insert(const T& s);    /**     * Insert all elements of other set.     *     * @param s set to insert.     */    void insert(const ElemSetAny<T>& s);    /**     * Left and right sets are identical [same elements and size].     *     * @param rhs set to compare with     */    bool operator==(const ElemSetAny<T>& rhs) const;        /**     * Left and right are not identical     *     * @param rhs set to compare with     */    bool operator!=(const ElemSetAny<T>& rhs) const;    /**     * All elements on left match, but right has more elments.     *     * @param rhs set to compare with     */    bool operator<(const ElemSetAny<T>& rhs) const;    /**     * All elements on right match, but left has more elements.     *     * @param rhs set to compare with     */    bool operator>(const ElemSetAny<T>& rhs) const;    /**     * Left is a subset of right.     *     * @param rhs set to compare with     */    bool operator<=(const ElemSetAny<T>& rhs) const;    /**     * Right is a subset of left.     *     * @param rhs set to compare with     */    bool operator>=(const ElemSetAny<T>& rhs) const;    /**     * All elements on left match, but right has more.     *     * May only be true if left is an empty set.     *     * @param rhs element to compare with.     */    bool operator<(const T& rhs) const;        /**     * All elements on on right match, but left has more.     *     * Will be true if the element is present in the set, and the set contains     * at least one more element.     *     * @param rhs element to compare with.     */    bool operator>(const T& rhs) const;    /**     * Left and right are identical.     *     * Will be true in a single element set which contains the rhs element.     *     * @param rhs element to compare with.     */    bool operator==(const T& rhs) const;    /**     * Disjoint sets.     *     * Will be true if element is not contained in set.     *     * @param rhs element to compare with.     */    bool operator!=(const T& rhs) const;    /**     * Left is a subset of right.     *     * Will be true if set is empty or contains rhs.     *     * @param rhs element to compare with.     */    bool operator<=(const T& rhs) const;    /**     * Right is a subset of left.     *     * Will be true if element is contained in set.     *     * @param rhs element to compare with.     */    bool operator>=(const T& rhs) const;    /**     * @return true if intersection is not empty     */    bool nonempty_intersection(const ElemSetAny<T>& rhs) const;    /**     * Removes elements in set.     *     * @param s elements to remove.     */    void erase(const ElemSetAny<T>& rhs);    /**     * Obtain iterator for set.     *     * @return iterator for the set.     */    iterator begin();    /**     * Obtain an iterator for the end.     *     * @return iterator for the end of the set.     */    iterator end();         /**     * Obtain const iterator for set.     *     * @return const iterator for the set.     */    const_iterator begin() const;    /**     * Obtain an const iterator for the end.     *     * @return const iterator for the end of the set.     */    const_iterator end() const;    const char* type() const;private:    Set _val;};// define set typestypedef ElemSetAny<ElemU32> ElemSetU32;typedef ElemSetAny<ElemCom32> ElemSetCom32;typedef ElemSetAny<ElemIPv4Net> ElemSetIPv4Net;typedef ElemSetAny<ElemIPv6Net> ElemSetIPv6Net;typedef ElemSetAny<ElemStr> ElemSetStr;#endif // __POLICY_COMMON_ELEM_SET_HH__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -