1 // Copyright (c) 1994, 1996 James Clark
2 // See the file COPYING for copying permission.
3 #pragma ident "%Z%%M% %I% %E% SMI"
5 #ifndef Vector_INCLUDED
6 #define Vector_INCLUDED 1
11 // This offers a subset of the interface offered by the standard C++
12 // vector class as defined in the Jan 96 WP.
13 // Code in SP currently assumes that size_type is size_t.
16 namespace SP_NAMESPACE
{
22 typedef size_t size_type
;
24 typedef const T
*const_iterator
;
25 Vector() : ptr_(0), size_(0), alloc_(0) { }
26 Vector(size_t n
) : ptr_(0), size_(0), alloc_(0) { append(n
); }
28 void resize(size_t n
) {
30 erase(ptr_
+ n
, ptr_
+ size_
);
35 Vector(size_t, const T
&);
36 Vector(const Vector
<T
> &);
37 Vector
<T
> &operator=(const Vector
<T
> &);
38 void assign(size_t, const T
&);
39 void push_back(const T
&t
) {
41 (void)new (ptr_
+ size_
) T(t
);
44 void insert(const_iterator p
, size_t n
, const T
&t
);
45 void insert(const_iterator p
, const_iterator q1
, const_iterator q2
);
47 void swap(Vector
<T
> &);
48 void clear() { erase(ptr_
, ptr_
+ size_
); }
49 size_t size() const { return size_
; }
50 T
&operator[](size_t i
) { return ptr_
[i
]; }
51 const T
&operator[](size_t i
) const { return ptr_
[i
]; }
52 iterator
begin() { return ptr_
; }
53 const_iterator
begin() const { return ptr_
; }
54 T
&back() { return ptr_
[size_
- 1]; }
55 const T
&back() const { return ptr_
[size_
- 1]; }
56 void reserve(size_t n
) { if (n
> alloc_
) reserve1(n
); }
57 iterator
erase(const_iterator
, const_iterator
);
60 Vector(const Vector
<T
> &);
61 void operator=(const Vector
<T
> &);
64 void reserve1(size_t);
68 size_t alloc_
; // allocated size
75 #endif /* not Vector_INCLUDED */
77 #ifdef SP_DEFINE_TEMPLATES