source: git/factory/templates/ftmpl_array.cc @ 6ab5981

spielwiese
Last change on this file since 6ab5981 was 6ab5981, checked in by Jens Schmidt <schmidt@…>, 27 years ago
o header fixed git-svn-id: file:///usr/local/Singular/svn/trunk@411 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.5 KB
Line 
1/* emacs edit mode for this file is -*- C++ -*- */
2/* $Id: ftmpl_array.cc,v 1.5 1997-06-19 13:11:10 schmidt Exp $ */
3
4#include <factoryconf.h>
5
6#include <templates/array.h>
7
8template <class T>
9Array<T>::Array() : data(0), _min(0), _max(-1), _size(0)
10{
11}
12
13template <class T>
14Array<T>::Array( const Array<T> & a )
15{
16    if ( a._size > 0 ) {
17        _min = a._min;
18        _max = a._max;
19        _size = a._size;
20        data = new T[_size];
21        for ( int i = 0; i < _size; i++ )
22            data[i] = a.data[i];
23    }
24    else {
25        data = 0;
26        _min = _size = 0;
27        _max = -1;
28    }
29}
30
31template <class T>
32Array<T>::Array( int i )
33{
34    _min = 0;
35    _max = i-1;
36    _size = i;
37    if ( i == 0 )
38        data = 0;
39    else
40        data = new T[_size];
41}
42
43template <class T>
44Array<T>::Array( int min, int max )
45{
46    if ( max < min ) {
47        _min = _size = 0;
48        _max = -1;
49        data = 0;
50    }
51    else {
52        _min = min;
53        _max = max;
54        _size = _max - _min + 1;
55        data = new T[_size];
56    }
57}
58
59template <class T>
60Array<T>::~Array()
61{
62    delete [] data;
63}
64
65template <class T>
66Array<T>& Array<T>::operator= ( const Array<T> & a )
67{
68    if ( this != &a ) {
69        delete [] data;
70        _min = a._min;
71        _max = a._max;
72        _size = a._size;
73        if ( a._size > 0 ) {
74            _size = a._size;
75            data = new T[_size];
76            for ( int i = 0; i < _size; i++ )
77                data[i] = a.data[i];
78        }
79        else {
80            data = 0;
81            _size = 0;
82        }
83    }
84    return *this;
85}
86
87template <class T>
88T& Array<T>::operator[] ( int i ) const
89{
90    ASSERT( i >= _min && i <= _max, "warning: array size mismatch." );
91    return data[i-_min];
92}
93
94template <class T>
95int Array<T>::size() const
96{
97    return _size;
98}
99
100template <class T>
101int Array<T>::min() const
102{
103    return _min;
104}
105
106template <class T>
107int Array<T>::max() const
108{
109    return _max;
110}
111
112/*
113template <class T>
114Array<T>& Array<T>::operator*= ( const T & t )
115{
116    for ( int i = 0; i < _size; i++ )
117        data[i] *= t;
118    return *this;
119}
120
121template <class T>
122Array<T>& Array<T>::operator+= ( const T & t )
123{
124    for ( int i = 0; i < _size; i++ )
125        data[i] += t;
126    return *this;
127}
128
129template <class T>
130Array<T>& Array<T>::operator+= ( const Array<T> & a )
131{
132    ASSERT ( _size == a._size, "warning: array size mismatch." );
133    for ( int i = 0; i < _size; i++ )
134        data[i] += a.data[i];
135    return *this;
136}
137*/
138
139#ifndef NOSTREAMIO
140template <class T>
141void Array<T>::print ( ostream & os ) const
142{
143    if ( _size == 0 )
144        os << "( )";
145    else {
146        os << "( " << data[0];
147        for ( int i = 1; i < _size; i++ )
148            os << ", " << data[i];
149        os << " )";
150    }
151}
152
153template <class T>
154ostream& operator<< ( ostream & os, const Array<T> & a )
155{
156    a.print( os );
157    return os;
158}
159#endif /* NOSTREAMIO */
Note: See TracBrowser for help on using the repository browser.