summaryrefslogtreecommitdiff
path: root/ace/Containers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Containers.cpp')
-rw-r--r--ace/Containers.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/ace/Containers.cpp b/ace/Containers.cpp
index 9a0cdb29e8c..0b3c403c1ed 100644
--- a/ace/Containers.cpp
+++ b/ace/Containers.cpp
@@ -2127,4 +2127,128 @@ ACE_Ordered_MultiSet_Iterator<T>::next (T *&item) const
return 0;
}
+// Dynamically initialize an array.
+
+template <class T>
+ACE_Array<T>::ACE_Array (size_t size)
+ : max_size_ (size),
+ cur_size_ (size)
+{
+ ACE_NEW (this->array_, T[size]);
+}
+
+template <class T>
+ACE_Array<T>::ACE_Array (size_t size,
+ const T &default_value)
+ : max_size_ (size),
+ cur_size_ (size)
+{
+ ACE_NEW (this->array_, T[size]);
+
+ for (size_t i = 0; i < size; i++)
+ this->array_[i] = default_value;
+}
+
+// The copy constructor (performs initialization).
+
+template <class T>
+ACE_Array<T>::ACE_Array (const ACE_Array<T> &s)
+ : max_size_ (s.size ()),
+ cur_size_ (s.size ())
+{
+ ACE_NEW (this->array_, T[s.size ()]);
+
+ for (size_t i = 0; i < this->size (); i++)
+ this->array_[i] = s.array_[i];
+}
+
+// Assignment operator (performs assignment).
+
+template <class T> void
+ACE_Array<T>::operator= (const ACE_Array<T> &s)
+{
+ // Check for "self-assignment".
+
+ if (this == &s)
+ return;
+ else if (this->max_size_ < s.size ())
+ {
+ delete [] this->array_;
+
+ ACE_NEW (this->array_, T[s.size ()]);
+
+ this->max_size_ = s.size ();
+ }
+
+ this->cur_size_ = s.size ();
+
+ for (size_t i = 0; i < this->size (); i++)
+ this->array_[i] = s.array_[i];
+}
+
+// Set an item in the array at location index.
+
+template <class T> int
+ACE_Array<T>::set (const T &new_item, size_t index)
+{
+ if (this->in_range (index))
+ {
+ this->array_[index] = new_item;
+ return 0;
+ }
+ else
+ return -1;
+}
+
+// Get an item in the array at location index.
+
+template <class T> int
+ACE_Array<T>::get (T &item, size_t index) const
+{
+ if (this->in_range (index))
+ {
+ item = this->array_[index]; // Copies the item. If you don't
+ // want to copy, use operator [] instead
+ // (but then you'll be responsible for
+ // range checking).
+ return 0;
+ }
+ else
+ return -1;
+}
+
+// Compare this array with <s> for equality.
+
+template <class T> int
+ACE_Array<T>::operator== (const ACE_Array<T> &s) const
+{
+ if (this == &s)
+ return 1;
+ else if (this->cur_size_ != s.cur_size_)
+ return 0;
+
+ for (size_t index = 0; index < s.cur_size_; index++)
+ if (this->array_[index] != s.array_[index])
+ return 0;
+
+ return 1;
+}
+
+template <class T> int
+ACE_Array_Iterator<T>::next (T *&item)
+{
+ // ACE_TRACE ("ACE_Array_Iterator<T>::next");
+
+ if (this->done ())
+ {
+ item = 0;
+ return 0;
+ }
+ else
+ {
+ item = &array_[current_];
+ return 1;
+ }
+}
+
#endif /* ACE_CONTAINERS_C */