source: git/factory/templates/ftmpl_array.cc @ b1dfaf

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