⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ocinum.cpp

📁 一个通用的oracle OCI开发程序包
💻 CPP
📖 第 1 页 / 共 4 页
字号:
}

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 + -