OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.law/] [code-gen5.C] - Diff between revs 305 and 338

Only display areas with differences | Details | Blame | View Log

Rev 305 Rev 338
// { dg-do run  }
// { dg-do run  }
// GROUPS passed code-generation
// GROUPS passed code-generation
// code-gen file
// code-gen file
// From: "David" 
// From: "David" 
// Date:     Mon, 15 Nov 1993 20:59:14 -0600 (CST)
// Date:     Mon, 15 Nov 1993 20:59:14 -0600 (CST)
// Subject:  An error!
// Subject:  An error!
// Message-ID: <9311160259.AA03353@pi14.arc.umn.edu>
// Message-ID: <9311160259.AA03353@pi14.arc.umn.edu>
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ANSI_C
#define ANSI_C
typedef double VEC ;
typedef double VEC ;
class Vector;
class Vector;
class VectorInt
class VectorInt
{
{
        public:
        public:
        /* Nothing public!! Only Vector can use this class */
        /* Nothing public!! Only Vector can use this class */
        private:
        private:
        VectorInt( int );
        VectorInt( int );
        VectorInt( int, double *, int = 0 );
        VectorInt( int, double *, int = 0 );
        VectorInt( const VectorInt & );
        VectorInt( const VectorInt & );
        ~VectorInt();
        ~VectorInt();
        VectorInt *refer();
        VectorInt *refer();
        void unrefer();
        void unrefer();
        int count;                              /* Number of Vector's referring to me */
        int count;                              /* Number of Vector's referring to me */
        VEC *vec;
        VEC *vec;
        friend class Vector;
        friend class Vector;
        friend class VecElem;
        friend class VecElem;
};
};
class VecElem
class VecElem
{
{
        public:
        public:
        operator double();
        operator double();
        double operator=( double );
        double operator=( double );
        private:
        private:
        VecElem( Vector &, int );
        VecElem( Vector &, int );
        VecElem( const VecElem & );
        VecElem( const VecElem & );
        Vector &v;
        Vector &v;
        int row;                                                /* Row element refers to */
        int row;                                                /* Row element refers to */
        friend class Vector;
        friend class Vector;
};
};
class Vector
class Vector
{
{
        public:
        public:
        Vector();                                       // Must be assigned to before used
        Vector();                                       // Must be assigned to before used
        Vector( VectorInt * );
        Vector( VectorInt * );
        Vector( int );
        Vector( int );
        Vector( int, double *, int beg = 0 );
        Vector( int, double *, int beg = 0 );
        Vector( const Vector & );
        Vector( const Vector & );
        Vector &operator=( const Vector & );
        Vector &operator=( const Vector & );
        ~Vector() { if(r) r->unrefer(); }
        ~Vector() { if(r) r->unrefer(); }
        int row() const { return 19; }
        int row() const { return 19; }
        int dim() const { return 10; }
        int dim() const { return 10; }
        double operator()( int ) const;
        double operator()( int ) const;
        VecElem operator()( int );
        VecElem operator()( int );
        double assign( int, double );
        double assign( int, double );
        friend std::ostream& operator<<(std::ostream&, const Vector& m );
        friend std::ostream& operator<<(std::ostream&, const Vector& m );
        private:
        private:
        VectorInt *r;                   /* Reference to real data */
        VectorInt *r;                   /* Reference to real data */
        friend class VecElem;
        friend class VecElem;
        friend class LUDecom;
        friend class LUDecom;
        friend class SVD;
        friend class SVD;
};
};
Vector::
Vector::
Vector()
Vector()
        : r(0)
        : r(0)
{}
{}
Vector::
Vector::
Vector( VectorInt *vi )
Vector( VectorInt *vi )
        : r(vi)
        : r(vi)
{
{
        r->refer();
        r->refer();
}
}
Vector::
Vector::
Vector( int row )
Vector( int row )
{
{
        assert( row > 0 );
        assert( row > 0 );
        r = new VectorInt( row );
        r = new VectorInt( row );
        r->refer();
        r->refer();
}
}
Vector::
Vector::
Vector( int row, double *d, int beg )
Vector( int row, double *d, int beg )
{
{
        assert( row > 0 );
        assert( row > 0 );
        r = new VectorInt( row, d, beg );
        r = new VectorInt( row, d, beg );
        r->refer();
        r->refer();
}
}
Vector::
Vector::
Vector( const Vector &A )
Vector( const Vector &A )
        : r( A.r->refer() )
        : r( A.r->refer() )
{}
{}
Vector& Vector::
Vector& Vector::
operator=( const Vector &A )
operator=( const Vector &A )
{
{
        if( r )
        if( r )
                r->unrefer();
                r->unrefer();
        r = A.r->refer();
        r = A.r->refer();
        return *this;
        return *this;
}
}
double Vector::
double Vector::
operator()( int row ) const
operator()( int row ) const
{
{
        assert(r != 0);
        assert(r != 0);
        return *r->vec;
        return *r->vec;
}
}
VecElem Vector::
VecElem Vector::
operator()( int r )
operator()( int r )
{
{
        assert(r != 0);
        assert(r != 0);
        return VecElem( *this, r );
        return VecElem( *this, r );
}
}
        /* assign changes the matrix, it does not create a new one! */
        /* assign changes the matrix, it does not create a new one! */
double Vector::
double Vector::
assign( int rownum, double d )
assign( int rownum, double d )
{
{
        assert(r != 0);
        assert(r != 0);
        if( rownum > row() || rownum <= 0 ) {
        if( rownum > row() || rownum <= 0 ) {
          std::cerr << "Warning: trying to assign out of bounds" << std::endl;
          std::cerr << "Warning: trying to assign out of bounds" << std::endl;
          std::cerr << "row " << rownum << std::endl;
          std::cerr << "row " << rownum << std::endl;
          std::cerr << "Vector size " << row() << std::endl;
          std::cerr << "Vector size " << row() << std::endl;
          std::abort();
          std::abort();
        }
        }
        if( r->count == 1 ) {
        if( r->count == 1 ) {
                        /* Don't need to create a new matrix, since we are the only */
                        /* Don't need to create a new matrix, since we are the only */
                        /*  one pointing to ours                                                                        */
                        /*  one pointing to ours                                                                        */
        }
        }
        else {
        else {
                VectorInt *vi = new VectorInt( *r );
                VectorInt *vi = new VectorInt( *r );
                r->unrefer();
                r->unrefer();
                r = vi->refer();
                r = vi->refer();
        }
        }
        return d;
        return d;
}
}
VectorInt::
VectorInt::
VectorInt( int sx )
VectorInt( int sx )
        : vec( new double[sx] ), count(0)
        : vec( new double[sx] ), count(0)
{ }
{ }
VectorInt::
VectorInt::
VectorInt( int sx, double *, int )
VectorInt( int sx, double *, int )
        : vec( new double[sx] ), count(0)
        : vec( new double[sx] ), count(0)
{
{
}
}
VectorInt::
VectorInt::
VectorInt( const VectorInt & )
VectorInt( const VectorInt & )
        : vec( new double[10] ), count(0)
        : vec( new double[10] ), count(0)
{
{
}
}
VectorInt * VectorInt::
VectorInt * VectorInt::
refer()
refer()
{
{
        count ++;
        count ++;
        return this;
        return this;
        // cout << "Refering vec" << endl;
        // cout << "Refering vec" << endl;
}
}
void VectorInt::
void VectorInt::
unrefer()
unrefer()
{
{
        count--;
        count--;
        if( count == 0 ) {
        if( count == 0 ) {
                delete this;
                delete this;
        }
        }
        // cout << "Unrefering vec" << endl;
        // cout << "Unrefering vec" << endl;
}
}
VectorInt::
VectorInt::
~VectorInt()
~VectorInt()
{
{
        delete vec;
        delete vec;
        vec = 0;
        vec = 0;
}
}
VecElem::
VecElem::
VecElem( Vector &vec, int r )
VecElem( Vector &vec, int r )
        : v(vec), row(r)
        : v(vec), row(r)
{
{
        if( r < 1 || r > vec.row() ) {
        if( r < 1 || r > vec.row() ) {
          std::cerr << "Trying to access vector element out of bounds";
          std::cerr << "Trying to access vector element out of bounds";
          std::cerr << std::endl;
          std::cerr << std::endl;
          std::abort();
          std::abort();
        }
        }
}
}
VecElem::
VecElem::
VecElem( const VecElem &elem )
VecElem( const VecElem &elem )
        : v(elem.v), row(elem.row)
        : v(elem.v), row(elem.row)
{}
{}
VecElem::
VecElem::
operator double()
operator double()
{
{
        assert( v.r->vec != 0 );
        assert( v.r->vec != 0 );
        return *v.r->vec;
        return *v.r->vec;
}
}
double VecElem::
double VecElem::
operator=( double d )
operator=( double d )
{
{
        return v.assign( row, d );
        return v.assign( row, d );
}
}
int makeforms( Vector cen, Vector **a, Vector **b );
int makeforms( Vector cen, Vector **a, Vector **b );
int main()
int main()
{
{
        Vector *a[8], *b[8], disp(3);
        Vector *a[8], *b[8], disp(3);
        Vector cen(3), cen2(3);
        Vector cen(3), cen2(3);
        int i, j;
        int i, j;
        if (makeforms (cen,a,b) != 10)
        if (makeforms (cen,a,b) != 10)
          { std::printf ("FAIL\n"); return 1; }
          { std::printf ("FAIL\n"); return 1; }
        else
        else
          std::printf ("PASS\n");
          std::printf ("PASS\n");
}
}
int
int
makeforms( Vector cen, Vector **a, Vector **b)
makeforms( Vector cen, Vector **a, Vector **b)
{
{
        return 10;
        return 10;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.