00001 /* 00002 * NumberMultiplier.hpp 00003 * 00004 * Copyright (c) 2000, 2019, 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_NUMBER_MULTIPLIER_HPP 00017 #define COH_NUMBER_MULTIPLIER_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/InvocableMap.hpp" 00024 #include "coherence/util/processor/PropertyProcessor.hpp" 00025 #include "coherence/util/ValueManipulator.hpp" 00026 00027 COH_OPEN_NAMESPACE3(coherence,util, processor) 00028 00029 using coherence::io::pof::PofReader; 00030 using coherence::io::pof::PofWriter; 00031 using coherence::util::InvocableMap; 00032 using coherence::util::ValueManipulator; 00033 00034 00035 /** 00036 * The NumberMultiplier entry processor is used to multiply a property value 00037 * of a Number type. Supported types are: Byte, Short, Integer, Long, 00038 * Float, Double, BigInteger and BigDecimal. 00039 * 00040 * @author tb 2008.04.28 00041 */ 00042 class COH_EXPORT NumberMultiplier 00043 : public class_spec<NumberMultiplier, 00044 extends<PropertyProcessor> > 00045 { 00046 friend class factory<NumberMultiplier>; 00047 00048 // ----- constructors --------------------------------------------------- 00049 00050 protected: 00051 /** 00052 * Construct an NumberMultiplier processor. 00053 */ 00054 NumberMultiplier(); 00055 00056 /** 00057 * Construct an NumberMultiplier processor that will increment a 00058 * property value by a specified amount, returning either the old or 00059 * the new value as specified. The type of the vNumFactor parameter 00060 * will dictate the type of the original and the new value. 00061 * 00062 * @param vManipulator the ValueManipulator; could be null 00063 * @param vNumFactor the Number representing the magnitude and 00064 * sign of the increment 00065 * @param fPostFactor pass true to return the value as it was 00066 * before it was incremented, or pass false 00067 * to return the value as it is after it is 00068 * incremented 00069 */ 00070 NumberMultiplier(ValueManipulator::View vManipulator, 00071 Number::View vNumFactor, bool fPostFactor); 00072 00073 00074 // ----- InvocableMap::EntryProcessor interface ------------------------- 00075 00076 public: 00077 /** 00078 * {@inheritDoc} 00079 */ 00080 virtual Object::Holder process(InvocableMap::Entry::Handle hEntry) const; 00081 00082 00083 // ----- PortableObject interface --------------------------------------- 00084 00085 public: 00086 /** 00087 * {@inheritDoc} 00088 */ 00089 virtual void readExternal(PofReader::Handle hIn); 00090 00091 /** 00092 * {@inheritDoc} 00093 */ 00094 virtual void writeExternal(PofWriter::Handle hOut) const; 00095 00096 00097 // ----- Describable interface ------------------------------------------ 00098 00099 public: 00100 /** 00101 * {@inheritDoc} 00102 */ 00103 virtual String::View getDescription() const; 00104 00105 00106 // ----- data members --------------------------------------------------- 00107 00108 protected: 00109 /** 00110 * The number to multiply by. 00111 */ 00112 FinalView<Number> f_vNumFactor; 00113 00114 /** 00115 * Whether to return the value before it was multiplied 00116 * ("post-factor") or after it is multiplied ("pre-factor"). 00117 */ 00118 bool m_fPostFactor; 00119 }; 00120 00121 COH_CLOSE_NAMESPACE3 00122 00123 #endif // COH_NUMBER_MULTIPLIER_HPP