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

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