Array.h
上传用户:lin85885
上传日期:2013-04-27
资源大小:796k
文件大小:1k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. #ifndef ARRAY_H_INCLUDED // -*- C++ -*-
  2. #define ARRAY_H_INCLUDED
  3. #include <string.h>
  4. #include "geometry.h"
  5. template<class T>
  6. class array {
  7. protected:
  8.     T *data;
  9.     int len;
  10. public:
  11.     array() { data=NULL; len=0; }
  12.     array(int l) { init(l); }
  13.     ~array() { free(); }
  14.     inline void init(int l);
  15.     inline void free();
  16.     inline void resize(int l);
  17.     inline T& ref(int i);
  18.     inline T& operator[](int i) { return data[i]; }
  19.     inline T& operator()(int i) { return ref(i); }
  20.     inline const T& ref(int i) const;
  21.     inline const T& operator[](int i) const { return data[i]; }
  22.     inline const T& operator()(int i) const { return ref(i); }
  23.     inline int length() const { return len; }
  24.     inline int maxLength() const { return len; }
  25. };
  26. template<class T>
  27. inline void array<T>::init(int l)
  28. {
  29.     data = new T[l];
  30.     len = l;
  31. }
  32. template<class T>
  33. inline void array<T>::free()
  34. {
  35.     if( data )
  36.     {
  37. delete[] data;
  38. data = NULL;
  39.     }
  40. }
  41. template<class T>
  42. inline T& array<T>::ref(int i)
  43. {
  44.     return data[i];
  45. }
  46. template<class T>
  47. inline const T& array<T>::ref(int i) const
  48. {
  49.     return data[i];
  50. }
  51. template<class T>
  52. inline void array<T>::resize(int l)
  53. {
  54.     T *old = data;
  55.     data = new T[l];
  56.     data = (T *)memcpy(data,old,MIN(len,l)*sizeof(T));
  57.     len = l;
  58.     delete[] old;
  59. }
  60. // ARRAY_H_INCLUDED
  61. #endif