📄 ocinum.cpp
字号:
}
bool operator<= (const COCINumber & lhs, int rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, unsigned int rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, short rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, unsigned short rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, long rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, unsigned long rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, float rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, double rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (const COCINumber & lhs, long double rhs)
{
return operator<=(lhs, COCINumber(((COCINumber&)lhs).get_session(),rhs));
}
bool operator<= (int lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (unsigned int lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (short lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (unsigned short lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (long lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (unsigned long lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (float lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (double lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
bool operator<= (long double lhs , const COCINumber & rhs)
{
return operator<=(lhs, rhs);
}
///////////////////////
//
// Round a number to a specified decimal place
//
// [in] decplace number of decimal digits to the right of the
// decimal point to round to. Negative values
// are allowed.
//
COCINumber & COCINumber::round(sword decplace)
{
if(!is_null())
{
CHECK(m_Session.get_error(),
OCINumberRound(m_Session.get_error(),
(OCINumber *)get_oci_number(),
decplace,
(OCINumber *)get_oci_number()));
}
return *this;
}
///////////////////////
//
// Truncate a number to a specified decimal place
//
// [in] decplace number of decimal digits to the right of the
// decimal point to truncate at. Negative values
// are allowed.
//
COCINumber & COCINumber::trunc(sword decplace)
{
if(!is_null())
{
CHECK(m_Session.get_error(),
OCINumberTrunc(m_Session.get_error(),
(OCINumber *)get_oci_number(),
decplace,
(OCINumber *)get_oci_number()));
}
return *this;
}
///////////////////////
//
// Get the square root of the number
//
COCINumber COCINumber::sqrt() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberSqrt(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Negate the number
//
COCINumber & COCINumber::neg()
{
if(!is_null())
{
CHECK(m_Session.get_error(),
OCINumberNeg(m_Session.get_error(),
(OCINumber *)get_oci_number(),
(OCINumber *)get_oci_number()));
}
return *this;
}
///////////////////////
//
// Set/Check if the number to zero
//
COCINumber & COCINumber::set_zero()
{
OCINumberSetZero(m_Session.get_error(),
(OCINumber *)get_oci_number());
return *this;
}
bool COCINumber::is_zero() const
{
bool result = false;
OCINumberIsZero(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(int *)&result);
return result;
}
///////////////////////
//
// Get the sign of the number
//
sword COCINumber::sign() const
{
sword result = 0;
// This doesn't seem to want to link in 804? Implemented our own
// functionality to do the same. Should revisit this later to see
// if fixed in OCI
/* CHECK(m_Session.get_error(),
OCINumberSign(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
&result ));*/
result = compare(*this, COCINumber(m_Session, 0));
return result;
}
///////////////////////
//
// Raises e to the specified Oracle number power
//
COCINumber COCINumber::exp() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberExp(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Rasies the number to the specified power
//
// [in] power exponent to which the base is to be raised
//
COCINumber COCINumber::power(const COCINumber& power) const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberPower(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)((COCINumber&)power).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Takes the number to a given integer power
//
// [in] exp exponent to which the base is to be raised
//
COCINumber COCINumber::intpower(sword exp) const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberIntPower(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
exp,
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Takes the logarithm with the specified base
//
// [in] base base of the logarithm
//
COCINumber COCINumber::log(const COCINumber& base) const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberLog(m_Session.get_error(),
(OCINumber *)((COCINumber&)base).get_oci_number(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Takes the natural logarithm (base e)
//
// [in] base base of the logarithm
//
COCINumber COCINumber::ln() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberLn(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Various Trigonometric Functions
//
COCINumber COCINumber::sin() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberSin(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::sinh() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberHypSin(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::cos() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberCos(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::cosh() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberHypCos(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::tan() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberTan(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::tanh() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberHypTan(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::asin() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberArcSin(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::acos() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberArcCos(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
COCINumber COCINumber::atan() const
{
COCINumber ans(m_Session);
if(!((COCINumber&)*this).is_null())
{
CHECK(m_Session.get_error(),
OCINumberArcTan(m_Session.get_error(),
(OCINumber *)((COCINumber&)*this).get_oci_number(),
(OCINumber *)ans.get_oci_number()));
}
return ans;
}
///////////////////////
//
// Compares two COCINumbers and returns:
// 0 - if they are equal
// <0 - if LHS < RHS
// >0 - if LHS > RHS
sword compare(const COCINumber& lhs, const COCINumber& rhs)
{
sword result = 0;
bool l = ((COCINumber&)lhs).is_null();
bool r = ((COCINumber&)rhs).is_null();
// If any of the numbers are null => result is not equal
if(l || r)
{
result = !result;
}
else
{
CHECK(((COCINumber&)lhs).get_session().get_error(),
OCINumberCmp(((COCINumber&)lhs).get_session().get_error(),
(OCINumber *)(((COCINumber&)lhs).get_oci_number()),
(OCINumber *)(((COCINumber&)rhs).get_oci_number()),
&result));
}
return result;
}
// Returns true if number is null
bool COCINumber::is_null()
{
return m_Indicator = (memcmp(&m_Null_Number, &m_Number, OCI_NUMBER_SIZE) == 0);
//return memcmp(&m_Null_Number, &m_Number, OCI_NUMBER_SIZE) == 0;
}
void COCINumber::set_null()
{
memset(&m_Number, '\0', OCI_NUMBER_SIZE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -