2 // GROUPS passed code-generation
4 // From: "David" <norman@pi14.arc.umn.edu>
5 // Date: Mon, 15 Nov 1993 20:59:14 -0600 (CST)
7 // Message-ID: <9311160259.AA03353@pi14.arc.umn.edu>
26 /* Nothing public!! Only Vector can use this class */
31 VectorInt( int, double *, int = 0 );
32 VectorInt( const VectorInt & );
37 int count; /* Number of Vector's referring to me */
50 double operator=( double );
54 VecElem( Vector &, int );
55 VecElem( const VecElem & );
58 int row; /* Row element refers to */
67 Vector(); // Must be assigned to before used
68 Vector( VectorInt * );
70 Vector( int, double *, int beg = 0 );
71 Vector( const Vector & );
72 Vector &operator=( const Vector & );
73 ~Vector() { if(r) r->unrefer(); };
75 int row() const { return 19; }
76 int dim() const { return 10; }
78 double operator()( int ) const;
79 VecElem operator()( int );
81 double assign( int, double );
83 friend std::ostream& operator<<(std::ostream&, const Vector& m );
87 VectorInt *r; /* Reference to real data */
101 Vector( VectorInt *vi )
112 r = new VectorInt( row );
118 Vector( int row, double *d, int beg )
122 r = new VectorInt( row, d, beg );
128 Vector( const Vector &A )
133 operator=( const Vector &A )
144 operator()( int row ) const
156 return VecElem( *this, r );
159 /* assign changes the matrix, it does not create a new one! */
161 assign( int rownum, double d )
165 if( rownum > row() || rownum <= 0 ) {
166 std::cerr << "Warning: trying to assign out of bounds" << std::endl;
167 std::cerr << "row " << rownum << std::endl;
168 std::cerr << "Vector size " << row() << std::endl;
172 if( r->count == 1 ) {
173 /* Don't need to create a new matrix, since we are the only */
174 /* one pointing to ours */
177 VectorInt *vi = new VectorInt( *r );
188 : vec( new double[sx] ), count(0)
192 VectorInt( int sx, double *, int )
193 : vec( new double[sx] ), count(0)
198 VectorInt( const VectorInt & )
199 : vec( new double[10] ), count(0)
203 VectorInt * VectorInt::
209 // cout << "Refering vec" << endl;
221 // cout << "Unrefering vec" << endl;
232 VecElem( Vector &vec, int r )
235 if( r < 1 || r > vec.row() ) {
236 std::cerr << "Trying to access vector element out of bounds";
237 std::cerr << std::endl;
243 VecElem( const VecElem &elem )
244 : v(elem.v), row(elem.row)
250 assert( v.r->vec != 0 );
255 operator=( double d )
257 return v.assign( row, d );
264 int makeforms( Vector cen, Vector **a, Vector **b );
268 Vector *a[8], *b[8], disp(3);
269 Vector cen(3), cen2(3);
272 if (makeforms (cen,a,b) != 10)
273 { std::printf ("FAIL\n"); return 1; }
275 std::printf ("PASS\n");
281 makeforms( Vector cen, Vector **a, Vector **b)