00001 /* 00002 * AbstractCompositeExtractor.hpp 00003 * 00004 * Copyright (c) 2000, 2010, 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_ABSTRACT_COMPOSITE_EXTRACTOR_HPP 00017 #define COH_ABSTRACT_COMPOSITE_EXTRACTOR_HPP 00018 00019 #include "coherence/lang.ns" 00020 00021 #include "coherence/io/pof/PofReader.hpp" 00022 #include "coherence/io/pof/PofWriter.hpp" 00023 #include "coherence/util/extractor/AbstractExtractor.hpp" 00024 00025 COH_OPEN_NAMESPACE3(coherence,util,extractor) 00026 00027 using coherence::io::pof::PofReader; 00028 using coherence::io::pof::PofWriter; 00029 00030 00031 /** 00032 * Abstract super class for ValueExtractor implementations that are based on 00033 * an underlying array of ValueExtractor objects. 00034 * 00035 * @author djl 2008.03.05 00036 */ 00037 class COH_EXPORT AbstractCompositeExtractor 00038 : public abstract_spec<AbstractCompositeExtractor, 00039 extends<AbstractExtractor> > 00040 { 00041 friend class factory<AbstractCompositeExtractor>; 00042 00043 // ----- constructors --------------------------------------------------- 00044 00045 protected: 00046 /** 00047 * Default constructor (necessary for the PortableObject interface). 00048 */ 00049 AbstractCompositeExtractor(); 00050 00051 /** 00052 * Construct a AbstractCompositeExtractor based on the specified 00053 * ValueExtractor array. 00054 * 00055 * @param vaExtractor the ValueExtractor array 00056 */ 00057 AbstractCompositeExtractor(ObjectArray::View vaExtractor); 00058 00059 /** 00060 * Construct a AbstractCompositeExtractor based on two ValueExtractors. 00061 * 00062 * @param vaE1 the first ValueExtractor 00063 * @param vaE2 the second ValueExtractor 00064 */ 00065 AbstractCompositeExtractor(ValueExtractor::View vE1, 00066 ValueExtractor::View vE2); 00067 00068 00069 // ----- PortableObject interface --------------------------------------- 00070 00071 public: 00072 /** 00073 * {@inheritDoc} 00074 */ 00075 virtual void readExternal(PofReader::Handle hIn); 00076 00077 /** 00078 * {@inheritDoc} 00079 */ 00080 virtual void writeExternal(PofWriter::Handle hOut) const; 00081 00082 00083 // ----- Object interface ----------------------------------------------- 00084 00085 public: 00086 /** 00087 * Compare the AbstractCompositeExtractor with another object to 00088 * determine equality. Two AbstractCompositeExtractor objects are 00089 * considered equal iff they belong to the same class and their 00090 * underlying ValueExtractor arrays are deep-equal. 00091 * 00092 * @return true iff this AbstractCompositeExtractor and the passed 00093 * object are equivalent 00094 */ 00095 virtual bool equals(Object::View v) const; 00096 00097 /** 00098 * {@inheritDoc} 00099 */ 00100 virtual size32_t hashCode() const; 00101 00102 /** 00103 * {@inheritDoc} 00104 */ 00105 virtual void toStream(std::ostream& out) const; 00106 00107 00108 // ----- data member accessors ------------------------------------------ 00109 00110 public: 00111 /** 00112 * Obtain the ValueExtractor array. 00113 * 00114 * @return the ValueExtractor array 00115 */ 00116 virtual ObjectArray::View getExtractors() const; 00117 00118 00119 // ----- data members --------------------------------------------------- 00120 00121 protected: 00122 /** 00123 * The ValueExtractor array. 00124 */ 00125 MemberView<ObjectArray> m_vaExtractor; 00126 }; 00127 00128 COH_CLOSE_NAMESPACE3 00129 00130 #endif // COH_ABSTRACT_COMPOSITE_EXTRACTOR_HPP