Initial import

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/radio@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2014-07-19 07:44:42 +00:00
commit 290fd5f5e0
36 changed files with 13976 additions and 0 deletions
+785
View File
@@ -0,0 +1,785 @@
#include <windows.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "RealVector.hpp"
void RealDebug(char *fmtstr, ...)
{
char buf[1024];
va_list args;
va_start(args, fmtstr);
vsprintf(buf, fmtstr, args);
va_end(args);
OutputDebugString(buf);
}
// -------------------------------------------------
// Assignments
// -------------------------------------------------
// = RealVector
RealVector& RealVector::operator=(const RealVector &src)
{
uint32_t i;
uint32_t j;
uint32_t dj;
checkSize(m_size, src.m_size);
j = 0;
dj = src.m_size > 1;
if (src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = -src.m_pPtrReal[j];
j += dj;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = src.m_pPtrReal[j];
j += dj;
}
}
return *this;
}
// += RealVector
RealVector& RealVector::operator+=(const RealVector &src)
{
uint32_t i;
uint32_t j;
uint32_t dj;
checkSize(m_size, src.m_size);
j = 0;
dj = src.m_size > 1;
if (src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= src.m_pPtrReal[j];
j += dj;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += src.m_pPtrReal[j];
j += dj;
}
}
return *this;
}
// -= RealVector
RealVector& RealVector::operator-=(const RealVector &src)
{
uint32_t i;
uint32_t j;
uint32_t dj;
checkSize(m_size, src.m_size);
j = 0;
dj = src.m_size > 1;
if (src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += src.m_pPtrReal[j];
j += dj;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= src.m_pPtrReal[j];
j += dj;
}
}
return *this;
}
// *= RealVector
RealVector& RealVector::operator*=(const RealVector &src)
{
uint32_t i;
uint32_t j;
uint32_t dj;
checkSize(m_size, src.m_size);
j = 0;
dj = src.m_size > 1;
if (src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= -src.m_pPtrReal[j];
j += dj;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= src.m_pPtrReal[j];
j += dj;
}
}
return *this;
}
// /= RealVector
RealVector& RealVector::operator/=(const RealVector &src)
{
uint32_t i;
uint32_t j;
uint32_t dj;
checkSize(m_size, src.m_size);
j = 0;
dj = src.m_size > 1;
if (src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= -src.m_pPtrReal[j];
j += dj;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= src.m_pPtrReal[j];
j += dj;
}
}
return *this;
}
// = RealVector::OpBinary
RealVector& RealVector::operator=(const OpBinary &src)
{
uint32_t i, j, k;
uint32_t dj, dk;
dj = src.a.m_size > 1;
dk = src.b.m_size > 1;
j = 0;
k = 0;
switch (src.op)
{
case OpBinary::ADD:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = + src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = - src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::SUB:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = + src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = - src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::MUL:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = + src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = - src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::DIV:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = + src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] = - (src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k]);
j += dj;
k += dk;
}
}
break;
default:
break;
}
return *this;
}
// += RealVector::OpBinary
RealVector& RealVector::operator+=(const OpBinary &src)
{
uint32_t i, j, k;
uint32_t dj, dk;
dj = src.a.m_size > 1;
dk = src.b.m_size > 1;
j = 0;
k = 0;
switch (src.op)
{
case OpBinary::ADD:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += + src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += - src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::SUB:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += + src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += - src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::MUL:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += + src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += - src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::DIV:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += + src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] += - (src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k]);
j += dj;
k += dk;
}
}
break;
default:
break;
}
return *this;
}
// -= RealVector::OpBinary
RealVector& RealVector::operator-=(const OpBinary &src)
{
uint32_t i, j, k;
uint32_t dj, dk;
dj = src.a.m_size > 1;
dk = src.b.m_size > 1;
j = 0;
k = 0;
switch (src.op)
{
case OpBinary::ADD:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= + src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= - src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::SUB:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= + src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= - src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::MUL:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= + src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= - src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::DIV:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= + src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] -= - (src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k]);
j += dj;
k += dk;
}
}
break;
default:
break;
}
return *this;
}
// *= RealVector::OpBinary
RealVector& RealVector::operator*=(const OpBinary &src)
{
uint32_t i, j, k;
uint32_t dj, dk;
dj = src.a.m_size > 1;
dk = src.b.m_size > 1;
j = 0;
k = 0;
switch (src.op)
{
case OpBinary::ADD:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= + src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= - src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::SUB:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= + src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= - src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::MUL:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= + src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= - src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::DIV:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= + src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] *= - (src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k]);
j += dj;
k += dk;
}
}
break;
default:
break;
}
return *this;
}
// /= RealVector::OpBinary
RealVector& RealVector::operator/=(const OpBinary &src)
{
uint32_t i, j, k;
uint32_t dj, dk;
dj = src.a.m_size > 1;
dk = src.b.m_size > 1;
j = 0;
k = 0;
switch (src.op)
{
case OpBinary::ADD:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= + src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= - src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::SUB:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= + src.a.m_pPtrReal[j] - src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= - src.a.m_pPtrReal[j] + src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::MUL:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= + src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= - src.a.m_pPtrReal[j] * src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
break;
case OpBinary::DIV:
if (!src.isNegative())
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= + src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k];
j += dj;
k += dk;
}
}
else
{
for (i=0; i < m_size; i++)
{
m_pPtrReal[i] /= - (src.a.m_pPtrReal[j] / src.b.m_pPtrReal[k]);
j += dj;
k += dk;
}
}
break;
default:
break;
}
return *this;
}
// -------------------------------------------------
// Binary Operators
// -------------------------------------------------
// Returning RealVector::OpBinary
RealVector::OpBinary operator+(const RealVector &a, const RealVector &b)
{
if (a.isNegative())
{
if (b.isNegative())
{
return -RealVector::OpBinary (a, b, RealVector::OpBinary::ADD);
}
else
{
return RealVector::OpBinary (b, a, RealVector::OpBinary::SUB);
}
}
if (b.isNegative())
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::SUB);
}
else
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::ADD);
}
}
RealVector::OpBinary operator-(const RealVector &a, const RealVector &b)
{
if (a.isNegative())
{
if (b.isNegative())
{
return RealVector::OpBinary (b, a, RealVector::OpBinary::SUB);
}
else
{
return -RealVector::OpBinary (a, b, RealVector::OpBinary::ADD);
}
}
if (b.isNegative())
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::SUB);
}
else
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::ADD);
}
}
RealVector::OpBinary operator*(const RealVector &a, const RealVector &b)
{
if (a.isNegative())
{
if (b.isNegative())
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::MUL);
}
else
{
return -RealVector::OpBinary (a, b, RealVector::OpBinary::MUL);
}
}
if (b.isNegative())
{
return -RealVector::OpBinary (a, b, RealVector::OpBinary::MUL);
}
else
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::MUL);
}
}
RealVector::OpBinary operator/(const RealVector &a, const RealVector &b)
{
if (a.isNegative())
{
if (b.isNegative())
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::DIV);
}
else
{
return -RealVector::OpBinary (a, b, RealVector::OpBinary::DIV);
}
}
if (b.isNegative())
{
return -RealVector::OpBinary (a, b, RealVector::OpBinary::DIV);
}
else
{
return RealVector::OpBinary (a, b, RealVector::OpBinary::DIV);
}
}