package data;
public class QuoteValue extends Object implements Value {
protected Value m_vBid;
protected Value m_vOffer;
public QuoteValue (Value vBid,
Value vOffer) {
super();
if (vBid.getClass() != vOffer.getClass()) {
throw new IllegalArgumentException ("QuoteValue: Classes of bid and offer must be identical.");
}
m_vBid = vBid;
m_vOffer = vOffer;
}
public Value getBid() {
return m_vBid;
}
public Value getOffer() {
return m_vOffer;
}
public Object clone() {
return new QuoteValue ((Value) m_vBid.clone(), (Value) m_vOffer.clone());
}
public void addAccumulating (Value v) {
Value vBidAdd;
Value vOfferAdd;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidAdd = qv.getBid();
vOfferAdd = qv.getOffer();
}
else {
vBidAdd = v;
vOfferAdd = v;
}
getBid().addAccumulating (vBidAdd);
getOffer().addAccumulating (vOfferAdd);
}
public void subtractAccumulating (Value v) {
Value vBidSub;
Value vOfferSub;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidSub = qv.getBid();
vOfferSub = qv.getOffer();
}
else {
vBidSub = v;
vOfferSub = v;
}
getBid().subtractAccumulating (vBidSub);
getOffer().subtractAccumulating (vOfferSub);
}
public void multiplyAccumulating (Value v) {
Value vBidMul;
Value vOfferMul;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidMul = qv.getBid();
vOfferMul = qv.getOffer();
}
else {
vBidMul = v;
vOfferMul = v;
}
getBid().multiplyAccumulating (vBidMul);
getOffer().multiplyAccumulating (vOfferMul);
}
public void multiplyAccumulating (double dl) {
getBid().multiplyAccumulating (dl);
getOffer().multiplyAccumulating (dl);
}
public void multiplyAccumulating (float fl) {
getBid().multiplyAccumulating (fl);
getOffer().multiplyAccumulating (fl);
}
public void multiplyAccumulating (long l) {
getBid().multiplyAccumulating (l);
getOffer().multiplyAccumulating (l);
}
public void multiplyAccumulating (int n) {
getBid().multiplyAccumulating (n);
getOffer().multiplyAccumulating (n);
}
public void divideAccumulating (Value v) {
Value vBidDiv;
Value vOfferDiv;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidDiv = qv.getBid();
vOfferDiv = qv.getOffer();
}
else {
vBidDiv = v;
vOfferDiv = v;
}
getBid().divideAccumulating (vBidDiv);
getOffer().divideAccumulating (vOfferDiv);
}
public Value add (Value v) {
Value vBidAdd;
Value vOfferAdd;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidAdd = qv.getBid();
vOfferAdd = qv.getOffer();
}
else {
vBidAdd = v;
vOfferAdd = v;
}
return new QuoteValue (getBid().add (vBidAdd), getOffer().add (vOfferAdd));
}
public Value subtract (Value v) {
Value vBidSub;
Value vOfferSub;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidSub = qv.getBid();
vOfferSub = qv.getOffer();
}
else {
vBidSub = v;
vOfferSub = v;
}
return new QuoteValue (getBid().subtract (vBidSub), getOffer().subtract (vOfferSub));
}
public Value multiply (Value v) {
Value vBidMul;
Value vOfferMul;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidMul = qv.getBid();
vOfferMul = qv.getOffer();
}
else {
vBidMul = v;
vOfferMul = v;
}
return new QuoteValue (getBid().multiply (vBidMul), getOffer().multiply (vOfferMul));
}
public Value multiply (double dl) {
return new QuoteValue (getBid().multiply (dl), getOffer().multiply (dl));
}
public Value multiply (float fl) {
return new QuoteValue (getBid().multiply (fl), getOffer().multiply (fl));
}
public Value multiply (long l) {
return new QuoteValue (getBid().multiply (l), getOffer().multiply (l));
}
public Value multiply (int n) {
return new QuoteValue (getBid().multiply (n), getOffer().multiply (n));
}
public Value divide (Value v) {
Value vBidDiv;
Value vOfferDiv;
if (v instanceof QuoteValue) {
QuoteValue qv = (QuoteValue) v;
vBidDiv = qv.getBid();
vOfferDiv = qv.getOffer();
}
else {
vBidDiv = v;
vOfferDiv = v;
}
return new QuoteValue (getBid().divide (vBidDiv), getOffer().divide (vOfferDiv));
}
public Value getSpread() {
return getBid().subtract (getOffer());
}
public Value getMid() {
Value vReturn = getBid().add (getOffer());
vReturn.divideAccumulating (new IntegerValue (2));
return vReturn;
}
public int compareTo (Object o) {
QuoteValue qvCompare = (QuoteValue) o;
return getMid().compareTo (qvCompare.getMid());
}
public boolean isAddZero() {
return ((getBid().isAddZero()) &&
(getOffer().isAddZero()));
}
public boolean isMulZero() {
return ((getBid().isMulZero()) &&
(getOffer().isMulZero()));
}
public boolean isMulOne() {
return ((getBid().isMulOne()) &&
(getOffer().isMulOne()));
}
}