coherence/util/DeltaSet.hpp

00001 /*
00002 * DeltaSet.hpp
00003 *
00004 * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
00005 *
00006 * Oracle is a registered trademarks of Oracle Corporation and/or its
00007 * affiliates.
00008 *
00009 * This software is the confidential and proprietary information of Oracle
00010 * Corporation. You shall not disclose such confidential and proprietary
00011 * information and shall use it only in accordance with the terms of the
00012 * license agreement you entered into with Oracle.
00013 *
00014 * This notice may not be removed or altered.
00015 */
00016 #ifndef COH_DELTA_SET_HPP
00017 #define COH_DELTA_SET_HPP
00018 
00019 #include "coherence/lang.ns"
00020 
00021 #include "coherence/util/AbstractSet.hpp"
00022 #include "coherence/util/Set.hpp"
00023 
00024 COH_OPEN_NAMESPACE2(coherence,util)
00025 
00026 
00027 /**
00028 * Implements a set which is based on another set, which is assumed to be
00029 * immutable.
00030 *
00031 * @author tb 2009.02.10
00032 */
00033 class COH_EXPORT DeltaSet
00034     : public class_spec<DeltaSet,
00035         extends<AbstractSet> >
00036     {
00037     friend class factory<DeltaSet>;
00038 
00039     // ----- constructor ----------------------------------------------------
00040 
00041     public:
00042         /**
00043         * @internal
00044         */
00045         DeltaSet(Set::Holder hSet);
00046 
00047 
00048     // ----- DeltaSet accessors ---------------------------------------------
00049 
00050     public:
00051         /**
00052         * Determine what items were in the original set.
00053         *
00054         * @return the set used to construct this DeltaSet
00055         */
00056         virtual Set::View getOriginal() const;
00057 
00058         /**
00059         * Determine if the set has been modified.
00060         *
00061         * @return  true if any items have been removed
00062         */
00063         virtual bool isModified() const;
00064 
00065         /**
00066         * Determine what items were added to the DeltaSet.
00067         *
00068         * @return a set of added items
00069         */
00070         virtual Set::View getAdded() const;
00071 
00072         /**
00073         * Determine what items were removed from the DeltaSet.
00074         *
00075         * @return an immutable set of removed items
00076         */
00077         virtual Set::View getRemoved() const;
00078 
00079         /**
00080         * Get a mutable set of items that were added to the DeltaSet.
00081         *
00082         * @return a mutable set of added items
00083         */
00084         virtual Set::Handle ensureAdded();
00085 
00086         /**
00087         * Get a mutable set of items that are removed in the DeltaSet.
00088         *
00089         * @return a mutable set of removed items
00090         */
00091         virtual Set::Handle ensureRemoved();
00092 
00093         /**
00094         * Apply the changes to the underlying set ("commit").
00095         */
00096         virtual void resolve();
00097 
00098         /**
00099         * Discard the changes to the set ("rollback").
00100         */
00101         virtual void reset();
00102 
00103 
00104     // ----- Collection interface -------------------------------------------
00105 
00106     public:
00107         /**
00108         * {@inheritDoc}
00109         */
00110         virtual size32_t size() const;
00111 
00112         /**
00113         * {@inheritDoc}
00114         */
00115         virtual bool contains(Object::View v) const;
00116 
00117         /**
00118         * {@inheritDoc}
00119         */
00120         virtual Iterator::Handle iterator() const;
00121 
00122         /**
00123         * {@inheritDoc}
00124         */
00125         virtual Muterator::Handle iterator();
00126 
00127         /**
00128         * {@inheritDoc}
00129         */
00130         virtual ObjectArray::Handle toArray(ObjectArray::Handle hao = NULL) const;
00131 
00132         /**
00133         * {@inheritDoc}
00134         */
00135         virtual bool add(Object::Holder oh);
00136 
00137         /**
00138         * {@inheritDoc}
00139         */
00140         virtual bool remove(Object::View v);
00141 
00142         /**
00143         * {@inheritDoc}
00144         */
00145         virtual void clear();
00146 
00147 
00148     // ----- data members ---------------------------------------------------
00149 
00150     protected:
00151         /**
00152         * The underlying set (assumed immutable).
00153         */
00154         FinalHolder<Set> m_ohSetOrig;
00155 
00156         /**
00157         * The added items.
00158         */
00159         MemberHandle<Set> m_hSetAdded;
00160 
00161         /**
00162         * The removed items.
00163         */
00164         MemberHandle<Set> m_hSetRemoved;
00165     };
00166 
00167 COH_CLOSE_NAMESPACE2
00168 
00169 #endif // COH_DELTA_SET_HPP
Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.