(file) Return to ArrayImpl.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/ArrayImpl.h between version 1.19 and 1.24

version 1.19, 2002/07/23 21:39:31 version 1.24, 2003/10/22 14:26:01
Line 1 
Line 1 
 //%/////////////////////////////////////////////////////////////////////////////  //%2003////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,  // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development
 // The Open Group, Tivoli Systems  // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
   // IBM Corp.; EMC Corporation, The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 37 
Line 39 
  
 #include <Pegasus/Common/Memory.h> #include <Pegasus/Common/Memory.h>
 #include <Pegasus/Common/ArrayRep.h> #include <Pegasus/Common/ArrayRep.h>
 #include <Pegasus/Common/Exception.h>  #include <Pegasus/Common/InternalException.h>
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
Line 63 
Line 65 
 Array<PEGASUS_ARRAY_T>::Array(Uint32 size) Array<PEGASUS_ARRAY_T>::Array(Uint32 size)
 { {
     _rep = ArrayRep<PEGASUS_ARRAY_T>::create(size);     _rep = ArrayRep<PEGASUS_ARRAY_T>::create(size);
   
       if (_rep == 0)
       {
           throw NullPointer();
       }
   
     InitializeRaw(static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data(), size);     InitializeRaw(static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data(), size);
 } }
  
Line 73 
Line 81 
 { {
     _rep = ArrayRep<PEGASUS_ARRAY_T>::create(size);     _rep = ArrayRep<PEGASUS_ARRAY_T>::create(size);
  
       if (_rep == 0)
       {
           throw NullPointer();
       }
   
     PEGASUS_ARRAY_T* data = static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data();     PEGASUS_ARRAY_T* data = static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data();
  
     while (size--)     while (size--)
Line 85 
Line 98 
 Array<PEGASUS_ARRAY_T>::Array(const PEGASUS_ARRAY_T* items, Uint32 size) Array<PEGASUS_ARRAY_T>::Array(const PEGASUS_ARRAY_T* items, Uint32 size)
 { {
     _rep = ArrayRep<PEGASUS_ARRAY_T>::create(size);     _rep = ArrayRep<PEGASUS_ARRAY_T>::create(size);
   
       if (_rep == 0)
       {
           throw NullPointer();
       }
   
     CopyToRaw(static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data(), items, size);     CopyToRaw(static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data(), items, size);
 } }
  
Line 128 
Line 147 
     if (capacity > static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->capacity)     if (capacity > static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->capacity)
     {     {
         Uint32 size = this->size();         Uint32 size = this->size();
         ArrayRep<PEGASUS_ARRAY_T>* rep = ArrayRep<PEGASUS_ARRAY_T>::create(capacity);          ArrayRep<PEGASUS_ARRAY_T>* rep =
               ArrayRep<PEGASUS_ARRAY_T>::create(capacity);
   
           if (rep != 0)
           {
         rep->size = size;         rep->size = size;
         CopyToRaw(rep->data(), static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data(), size);              CopyToRaw(
         ArrayRep<PEGASUS_ARRAY_T>::destroy(static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep));                  rep->data(),
                   static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data(),
                   size);
               ArrayRep<PEGASUS_ARRAY_T>::destroy(
                   static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep));
         _rep = rep;         _rep = rep;
     }     }
 } }
   }
  
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
Line 190 
Line 218 
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 PEGASUS_ARRAY_T& Array<PEGASUS_ARRAY_T>::operator[](Uint32 pos)  PEGASUS_ARRAY_T& Array<PEGASUS_ARRAY_T>::operator[](Uint32 index)
 { {
     if (pos >= size())      if (index >= size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data()[pos];      return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data()[index];
 } }
  
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 const PEGASUS_ARRAY_T& Array<PEGASUS_ARRAY_T>::operator[](Uint32 pos) const  const PEGASUS_ARRAY_T& Array<PEGASUS_ARRAY_T>::operator[](Uint32 index) const
 { {
     if (pos >= size())      if (index >= size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data()[pos];      return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data()[index];
 } }
  
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
Line 259 
Line 287 
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 void Array<PEGASUS_ARRAY_T>::insert(Uint32 pos, const PEGASUS_ARRAY_T& x)  void Array<PEGASUS_ARRAY_T>::insert(Uint32 index, const PEGASUS_ARRAY_T& x)
 { {
     insert(pos, &x, 1);      insert(index, &x, 1);
 } }
  
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 void Array<PEGASUS_ARRAY_T>::insert(Uint32 pos, const PEGASUS_ARRAY_T* x, Uint32 size)  void Array<PEGASUS_ARRAY_T>::insert(Uint32 index, const PEGASUS_ARRAY_T* x, Uint32 size)
 { {
     if (pos > this->size())      if (index > this->size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     reserveCapacity(this->size() + size);     reserveCapacity(this->size() + size);
  
     Uint32 n = this->size() - pos;      Uint32 n = this->size() - index;
  
     if (n)     if (n)
         memmove(          memmove(_data() + index + size,
             _data() + pos + size, _data() + pos, sizeof(PEGASUS_ARRAY_T) * n);                  _data() + index,
                   sizeof(PEGASUS_ARRAY_T) * n);
  
     CopyToRaw(_data() + pos, x, size);      CopyToRaw(_data() + index, x, size);
     static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size += size;     static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size += size;
 } }
  
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 void Array<PEGASUS_ARRAY_T>::remove(Uint32 pos)  void Array<PEGASUS_ARRAY_T>::remove(Uint32 index)
 { {
     remove(pos, 1);      remove(index, 1);
 } }
  
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 void Array<PEGASUS_ARRAY_T>::remove(Uint32 pos, Uint32 size)  void Array<PEGASUS_ARRAY_T>::remove(Uint32 index, Uint32 size)
 { {
     if (pos + size - 1 > this->size())      if (index + size - 1 > this->size())
         throw OutOfBounds();          throw IndexOutOfBoundsException();
  
     Destroy(_data() + pos, size);      Destroy(_data() + index, size);
  
     Uint32 rem = this->size() - (pos + size);      Uint32 rem = this->size() - (index + size);
  
     if (rem)     if (rem)
         memmove(          memmove(_data() + index,
             _data() + pos, _data() + pos + size, sizeof(PEGASUS_ARRAY_T) * rem);                  _data() + index + size,
                   sizeof(PEGASUS_ARRAY_T) * rem);
  
     static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size -= size;     static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->size -= size;
 } }
Line 314 
Line 344 
 #ifndef PEGASUS_ARRAY_T #ifndef PEGASUS_ARRAY_T
 template<class PEGASUS_ARRAY_T> template<class PEGASUS_ARRAY_T>
 #endif #endif
 PEGASUS_ARRAY_T* Array<PEGASUS_ARRAY_T>::begin()  
 {  
     return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data();  
 }  
   
 #ifndef PEGASUS_ARRAY_T  
 template<class PEGASUS_ARRAY_T>  
 #endif  
 PEGASUS_ARRAY_T* Array<PEGASUS_ARRAY_T>::end()  
 {  
     return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data() + size();  
 }  
   
 #ifndef PEGASUS_ARRAY_T  
 template<class PEGASUS_ARRAY_T>  
 #endif  
 const PEGASUS_ARRAY_T* Array<PEGASUS_ARRAY_T>::begin() const  
 {  
     return getData();  
 }  
   
 #ifndef PEGASUS_ARRAY_T  
 template<class PEGASUS_ARRAY_T>  
 #endif  
 const PEGASUS_ARRAY_T* Array<PEGASUS_ARRAY_T>::end() const  
 {  
     return getData() + size();  
 }  
   
 #ifndef PEGASUS_ARRAY_T  
 template<class PEGASUS_ARRAY_T>  
 #endif  
 PEGASUS_ARRAY_T* Array<PEGASUS_ARRAY_T>::_data() const PEGASUS_ARRAY_T* Array<PEGASUS_ARRAY_T>::_data() const
 { {
     return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data();     return static_cast<ArrayRep<PEGASUS_ARRAY_T>*>(_rep)->data();


Legend:
Removed from v.1.19  
changed lines
  Added in v.1.24

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2