coherence/util/SubList.hpp

00001 /*
00002 * SubList.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_SUB_LIST_HPP
00017 #define COH_SUB_LIST_HPP
00018 
00019 #include "coherence/lang.ns"
00020 
00021 #include "coherence/util/AbstractList.hpp"
00022 #include "coherence/util/List.hpp"
00023 
00024 COH_OPEN_NAMESPACE2(coherence,util)
00025 
00026 
00027 /**
00028 * SubList delegates all operations to it's full list while providing a
00029 * partial view of the list.
00030 *
00031 * @author nsa 2008.02.08
00032 */
00033 class COH_EXPORT SubList
00034     : public abstract_spec<SubList,
00035         extends<AbstractList> >
00036     {
00037     // ----- constructor ----------------------------------------------------
00038 
00039     public:
00040         /**
00041         * @internal
00042         */
00043         SubList(size32_t fromIndex, size32_t toIndex, List::Holder ohList);
00044 
00045 
00046     // ----- List interface -------------------------------------------------
00047 
00048     public:
00049         /**
00050         * {@inheritDoc}
00051         */
00052         virtual bool add(size32_t i, Object::Holder oh);
00053 
00054         /**
00055         * {@inheritDoc}
00056         */
00057         virtual bool addAll(size32_t i, Collection::View vc);
00058 
00059         /**
00060         * {@inheritDoc}
00061         */
00062         virtual Object::Holder get(size32_t i) const;
00063 
00064         /**
00065         * {@inheritDoc}
00066         */
00067         using List::get;
00068 
00069         /**
00070         * {@inheritDoc}
00071         */
00072         virtual size32_t indexOf(Object::View v) const;
00073 
00074         /**
00075         * {@inheritDoc}
00076         */
00077         virtual size32_t lastIndexOf(Object::View v) const;
00078 
00079         /**
00080         * {@inheritDoc}
00081         */
00082         virtual ListIterator::Handle listIterator(size32_t index = 0) const;
00083 
00084         /**
00085         * {@inheritDoc}
00086         */
00087         virtual ListMuterator::Handle listIterator(size32_t index = 0);
00088 
00089         /**
00090         * {@inheritDoc}
00091         */
00092         virtual Object::Holder remove(size32_t idx);
00093 
00094         /**
00095         * {@inheritDoc}
00096         */
00097         virtual Object::Holder set(size32_t idx, Object::Holder oh);
00098 
00099 
00100     // ----- Collection interface -------------------------------------------
00101 
00102     public:
00103         /**
00104         * {@inheritDoc}
00105         */
00106         virtual size32_t size() const;
00107 
00108         /**
00109         * {@inheritDoc}
00110         */
00111         virtual Iterator::Handle iterator() const;
00112 
00113         /**
00114         * {@inheritDoc}
00115         */
00116         virtual Muterator::Handle iterator();
00117 
00118         /**
00119         * {@inheritDoc}
00120         */
00121         virtual bool add(Object::Holder oh);
00122 
00123         /**
00124         * {@inheritDoc}
00125         */
00126         virtual bool addAll(Collection::View vc);
00127 
00128         /**
00129         * {@inheritDoc}
00130         */
00131         virtual bool remove(Object::View v);
00132 
00133 
00134     // ----- helper methods -------------------------------------------------
00135 
00136     protected:
00137         /**
00138         * Validate that the supplied index is in the appropriate range
00139         * for this SubList.
00140         *
00141         * @param i  the index to test against the SubList's boundaries
00142         *
00143         * @throws coherence::lang::IndexOutOfBoundsException iff the
00144         * supplied index is outside the range of this SubList.
00145         */
00146         void assertIndex(size32_t i) const;
00147 
00148         /**
00149         * Return the to delegate to.
00150         *
00151         * @return the list to delegate to
00152         */
00153         virtual List::Handle getDelegate();
00154 
00155         /**
00156         * Return the to delegate to.
00157         *
00158         * @return the list to delegate to
00159         */
00160         virtual List::View getDelegate() const;
00161 
00162     // ----- data members ---------------------------------------------------
00163 
00164     protected:
00165         /**
00166         * The underlying list this is a sublist of
00167         */
00168         FinalHolder<List> m_ohList;
00169 
00170         /**
00171         * The offset this list is based on from the underlying list.
00172         */
00173         size32_t m_iOffset;
00174 
00175         /**
00176         * The size of this sublist.
00177         */
00178         size32_t m_iSize;
00179     };
00180 
00181 COH_CLOSE_NAMESPACE2
00182 
00183 #endif // COH_SUB_LIST_HPP
Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.