[Kst] extragear/graphics/kst/src/plugins/chop

Adam Treat treat at kde.org
Wed Nov 29 23:00:58 CET 2006


Yes.  The problem was the resizing of the output vectors to half the size of 
the input vector.  There was implicit rounding error.

On Wednesday 29 November 2006 4:44 pm, George Staikos wrote:
> And this fixes the bug in chop too, right?
>
> On 29-Nov-06, at 4:25 PM, Adam Treat wrote:
> > SVN commit 609242 by treat:
> >
> > Convert chop plugin to C++ basic plugin
> >
> >
> >  M  +7 -7      Makefile.am
> >  M  +101 -63   chop.cpp
> >  A             chop.h   [License: GPL (v2+)]
> >  D             chop.xml
> >  A             kstobject_chop.desktop
> >
> >
> > --- trunk/extragear/graphics/kst/src/plugins/chop/Makefile.am
> > #609241:609242
> > @@ -1,11 +1,11 @@
> > -installdir=$(kde_moduledir)/kstplugins
> > -INCLUDES=-I$(srcdir)/../../../kst $(all_includes)
> > +INCLUDES=-I$(top_srcdir)/kst -I$(top_srcdir)/kst/src/libkst -I$
> > (top_srcdir)/kst/src/libkstmath $(all_includes)
> >
> > -install_LTLIBRARIES=chop.la
> > +kde_module_LTLIBRARIES=kstobject_chop.la
> >
> > -chop_la_LDFLAGS=-module $(KDE_PLUGIN) $(all_libraries)
> > -chop_la_SOURCES=chop.cpp
> > +kstobject_chop_la_LDFLAGS=$(all_libraries) -module -avoid-version
> > +kstobject_chop_la_SOURCES=chop.cpp
> >
> > +services_DATA=kstobject_chop.desktop
> > +servicesdir=$(kde_servicesdir)/kst
> > +
> >  METASOURCES=AUTO
> > -
> > -install_DATA=chop.xml
> > --- trunk/extragear/graphics/kst/src/plugins/chop/chop.cpp
> > #609241:609242
> > @@ -1,68 +1,106 @@
> > -/*
> > - *  Phase plugin for KST.
> > - *  Copyright 2003, The University of British Columbia
> > - *  Released under the terms of the GPL.
> > - *
> > - */
> > +/
> > **********************************************************************
> > *****
> > +                   chop.cpp
> > +                             -------------------
> > +    begin                : 11/29/06
> > +    copyright            : (C) 2006 The University of Toronto
> > +    email                :
> > +
> > **********************************************************************
> > *****/
> >
> > -#include <stdlib.h>
> > -#include <math.h>
> > -#include <string.h>
> > +/
> > **********************************************************************
> > *****
> > +
> > *
> >     *
> > + *   This program is free software; you can redistribute it and/or
> > modify  *
> > + *   it under the terms of the GNU General Public License as
> > published by  *
> > + *   the Free Software Foundation; either version 2 of the
> > License, or     *
> > + *   (at your option) any later
> > version.                                   *
> > +
> > *
> >     *
> > +
> > **********************************************************************
> > *****/
> > +#include "chop.h"
> >
> > -#define KST_UNUSED(x) if(x){};
> > +#include <kgenericfactory.h>
> >
> > -extern "C" int chop( const double *const inArrays[], const int
> > inArrayLens[],
> > -		const double inScalars[],
> > -		double *outArrays[], int outArrayLens[],
> > -		double outScalars[] );
> > +static const QString& ARRAY = KGlobal::staticQString("Array");
> > +static const QString& ODD = KGlobal::staticQString("Odd Array");
> > +static const QString& EVEN = KGlobal::staticQString("Even Array");
> > +static const QString& DIFF = KGlobal::staticQString("Difference
> > Array");
> > +static const QString& INDEX = KGlobal::staticQString("Index Array");
> >
> > -int chop( const double *const inArrays[], const int inArrayLens[],
> > -		const double inScalars[],
> > -		double *outArrays[], int outArrayLens[],
> > -		double outScalars[] )
> > -{
> > -    KST_UNUSED( inScalars )
> > -    KST_UNUSED( outScalars )
> > -
> > -    double* pResult[4];
> > -    int iRetVal = -1;
> > -    int iLength = inArrayLens[0];
> > -    int iLengthNew = iLength / 2;
> > -    int i;
> > -
> > -    if( iLength > 1 )
> > -    {
> > -        for( i=0; i<4; i++ )
> > -        {
> > -            if( outArrayLens[i] != iLengthNew )
> > -            {
> > -                pResult[i] = (double*)realloc( outArrays[i],
> > iLengthNew * sizeof( double ) );
> > -            }
> > -            else
> > -            {
> > -                pResult[i] = outArrays[i];
> > -            }
> > -        }
> > -
> > -        if( pResult[0] != NULL && pResult[1] != NULL && pResult
> > [2] != NULL && pResult[3] != NULL )
> > -        {
> > -            for( i=0; i<4; i++ )
> > -            {
> > -                outArrays[i] = pResult[i];
> > -                outArrayLens[i] = iLengthNew;
> > -            }
> > -
> > -            for( i=0; i<iLength; i+=2 )
> > -            {
> > -                outArrays[0][i/2] = inArrays[0][i+0];
> > -                outArrays[1][i/2] = inArrays[0][i+1];
> > -                outArrays[2][i/2] = inArrays[0][i+0] - inArrays[0]
> > [i+1];
> > -                outArrays[3][i/2] = i/2;
> > -            }
> > -
> > -            iRetVal = 0;
> > -        }
> > -    }
> > -
> > -    return iRetVal;
> > +KST_KEY_DATAOBJECT_PLUGIN( chop )
> > +
> > +K_EXPORT_COMPONENT_FACTORY( kstobject_chop,
> > +    KGenericFactory<Chop>( "kstobject_chop" ) )
> > +
> > +Chop::Chop( QObject */*parent*/, const char */*name*/, const
> > QStringList &/*args*/ )
> > +    : KstBasicPlugin() {
> >  }
> > +
> > +
> > +Chop::~Chop() {
> > +}
> > +
> > +
> > +bool Chop::algorithm() {
> > +
> > +  KstVectorPtr array  = inputVector(ARRAY);
> > +
> > +  KstVectorPtr odd    = outputVector(ODD);
> > +  KstVectorPtr even   = outputVector(EVEN);
> > +  KstVectorPtr diff   = outputVector(DIFF);
> > +  KstVectorPtr index  = outputVector(INDEX);
> > +
> > +  QValueList<KstVectorPtr> outputs;
> > +  outputs << odd << even << diff << index;
> > +
> > +  int iLength = array->length();
> > +  int iLengthNew = (int)ceil(iLength / 2.0);
> > +
> > +  if (iLength > 1) {
> > +
> > +    QValueList<KstVectorPtr>::iterator it = outputs.begin();
> > +    for(; it != outputs.end(); ++it) {
> > +      if ((*it)->length() != iLengthNew) {
> > +        (*it)->resize(iLengthNew, false);
> > +      }
> > +    }
> > +
> > +    for (int i = 0; i < iLength; i+=2) {
> > +      odd->value()[i/2] = array->value()[i];
> > +      even->value()[i/2] = array->value()[i+1];
> > +      diff->value()[i/2] = array->value()[i] - array->value()[i+1];
> > +      index->value()[i/2] = i/2;
> > +    }
> > +  }
> > +
> > +  return true;
> > +}
> > +
> > +
> > +QStringList Chop::inputVectorList() const {
> > +  return QStringList( ARRAY );
> > +}
> > +
> > +
> > +QStringList Chop::inputScalarList() const {
> > +  return QStringList();
> > +}
> > +
> > +
> > +QStringList Chop::inputStringList() const {
> > +  return QStringList();
> > +}
> > +
> > +
> > +QStringList Chop::outputVectorList() const {
> > +  return QStringList( ODD ) << EVEN << DIFF << INDEX;
> > +}
> > +
> > +
> > +QStringList Chop::outputScalarList() const {
> > +  return QStringList();
> > +}
> > +
> > +
> > +QStringList Chop::outputStringList() const {
> > +  return QStringList();
> > +}
> > +
> > +#include "chop.moc"
> > _______________________________________________
> > Kst mailing list
> > Kst at kde.org
> > https://mail.kde.org/mailman/listinfo/kst
>
> --
> George Staikos
> KDE Developer				http://www.kde.org/
> Staikos Computing Services Inc.		http://www.staikos.net/
>
>
>
> _______________________________________________
> Kst mailing list
> Kst at kde.org
> https://mail.kde.org/mailman/listinfo/kst


More information about the Kst mailing list