3065 some functions in the tcp module can be static
[unleashed.git] / usr / src / cmd / man / src / util / nsgmls.src / include / Vector.h
blobc0605f44df602d53e997114e1fc3671658ce315a
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
8 #include <stddef.h>
9 #include "xnew.h"
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.
15 #ifdef SP_NAMESPACE
16 namespace SP_NAMESPACE {
17 #endif
19 template<class T>
20 class Vector {
21 public:
22 typedef size_t size_type;
23 typedef T *iterator;
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); }
27 ~Vector();
28 void resize(size_t n) {
29 if (n < size_)
30 erase(ptr_ + n, ptr_ + size_);
31 else if (n > size_)
32 append(n - size_);
34 #ifndef NC
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) {
40 reserve(size_ + 1);
41 (void)new (ptr_ + size_) T(t);
42 size_++;
44 void insert(const_iterator p, size_t n, const T &t);
45 void insert(const_iterator p, const_iterator q1, const_iterator q2);
46 #endif
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);
58 private:
59 #ifdef NC
60 Vector(const Vector<T> &);
61 void operator=(const Vector<T> &);
62 #endif
63 void append(size_t);
64 void reserve1(size_t);
66 size_t size_;
67 T *ptr_;
68 size_t alloc_; // allocated size
71 #ifdef SP_NAMESPACE
73 #endif
75 #endif /* not Vector_INCLUDED */
77 #ifdef SP_DEFINE_TEMPLATES
78 #include "Vector.cxx"
79 #endif