Oracle Coherence for C++ API
Release 3.7.1.0
E22845-01
00001 /* 00002 * SubList.hpp 00003 * 00004 * Copyright (c) 2000, 2011, 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