service plugin and qdecimal library has been added

This commit is contained in:
Zdenek Jonak
2016-02-09 21:55:05 +01:00
parent 3d68281c87
commit 4d74bed177
251 changed files with 127772 additions and 1 deletions
+83
View File
@@ -0,0 +1,83 @@
/** \file QDecPacked.cc
* Definitions for the class QDecPacked.
*
* (C) Copyright by Semih Cemiloglu
* All rights reserved, see COPYRIGHT file for details.
*
* $Id$
*
*
*/
#include "QDecPacked.hh"
#include "QDecNumber.hh"
#include "QDecSingle.hh"
#include "QDecDouble.hh"
#include "QDecQuad.hh"
QDecPacked::QDecPacked(const char* str)
{ *this = fromQDecNumber(QDecNumber(str)); }
QDecPacked::QDecPacked(double d)
{ *this = fromQDecNumber(QDecNumber(d)); }
QDecPacked::QDecPacked(const QDecSingle& s)
{ *this = s.toQDecPacked(); }
QDecPacked::QDecPacked(const QDecDouble& d)
{ *this = d.toQDecPacked(); }
QDecPacked::QDecPacked(const QDecQuad& q)
{ *this = q.toQDecPacked(); }
QDecPacked& QDecPacked::fromQDecNumber(const QDecNumber& d)
{
uint8_t bfr[QDecNumDigits] = { 0 };
int32_t scale = 0;
uint8_t* rv = decPackedFromNumber(bfr, QDecNumDigits, &scale, d.data());
if(rv) {
m_scale = scale;
char* p = (char*)bfr;
int i = 0;
// Skip null bytes at the left
for(; p[i] == '\0' || i==QDecNumDigits; ++i);
// Construct byte array from the beginning of BCD bytes
m_bytes = QByteArray(&p[i], QDecNumDigits-i);
}
return *this;
}
QDecNumber QDecPacked::toQDecNumber() const
{
if(length() > 0) {
decNumber n;
return decPackedToNumber(bytesRaw(), length(), &m_scale, &n);
}
else
// Not initialized, return default QDecNumber value
return QDecNumber();
}
QDecPacked& QDecPacked::fromDouble(double d)
{
*this = fromQDecNumber(QDecNumber(d));
return *this;
}
QDecPacked& QDecPacked::fromString(const char* str)
{
*this = fromQDecNumber(QDecNumber(str));
return *this;
}
QByteArray QDecPacked::toString() const
{
return toQDecNumber().toString();
}