Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /trunk/TTProxy/YCL/include/YCL/Pointer.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3226 by maya, Tue Mar 24 09:37:20 2009 UTC revision 3227 by maya, Tue Mar 24 15:10:33 2009 UTC
# Line 1  Line 1 
1  /*  /*
2   * $Id: Pointer.h,v 1.4 2007-08-18 08:52:18 maya Exp $   * $Id: Pointer.h,v 1.4 2007-08-18 08:52:18 maya Exp $
3   */   */
4    
5  #if _MSC_VER >= 1000  #if _MSC_VER >= 1000
6  #pragma once  #pragma once
7  #endif // _MSC_VER >= 1000  #endif // _MSC_VER >= 1000
8    
9  #ifndef _YCL_POINTER_H_  #ifndef _YCL_POINTER_H_
10  #define _YCL_POINTER_H_  #define _YCL_POINTER_H_
11    
12  #include <YCL/Array.h>  #include <YCL/Array.h>
13    
14  namespace yebisuya {  namespace yebisuya {
15            
16  // ポインタをラップするためのクラス。  // ポインタをラップするためのクラス。
17  template<class TYPE, class REFCTRL = Object >  template<class TYPE, class REFCTRL = Object >
18  class Pointer {  class Pointer {
19  private:  private:
20      // 格納するポインタ      // 格納するポインタ
21      TYPE* value;      TYPE* value;
22  protected:  protected:
23      // ポインタを置き換える      // ポインタを置き換える
24      void set(TYPE* ptr) {      void set(TYPE* ptr) {
25          value = (TYPE*) REFCTRL::set(value, ptr);          value = (TYPE*) REFCTRL::set(value, ptr);
26      }      }
27  public:  public:
28      // デフォルトコンストラクタ      // デフォルトコンストラクタ
29      Pointer():value(NULL) {      Pointer():value(NULL) {
30      }      }
31      // 初期値付きコンストラクタ      // 初期値付きコンストラクタ
32      Pointer(TYPE* ptr):value(NULL) {      Pointer(TYPE* ptr):value(NULL) {
33          set(ptr);          set(ptr);
34      }      }
35      // コピーコンストラクタ      // コピーコンストラクタ
36      Pointer(const Pointer& ptr):value(NULL) {      Pointer(const Pointer& ptr):value(NULL) {
37          set(ptr.value);          set(ptr.value);
38      }      }
39      // デストラクタ      // デストラクタ
40      ~Pointer() {      ~Pointer() {
41          set(NULL);          set(NULL);
42      }      }
43      // 代入演算子      // 代入演算子
44      Pointer& operator=(TYPE* ptr) {      Pointer& operator=(TYPE* ptr) {
45          set(ptr);          set(ptr);
46          return *this;          return *this;
47      }      }
48      // コピー代入演算子      // コピー代入演算子
49      Pointer& operator=(const Pointer& ptr) {      Pointer& operator=(const Pointer& ptr) {
50          set(ptr.value);          set(ptr.value);
51          return *this;          return *this;
52      }      }
53      // 間接演算子      // 間接演算子
54      TYPE& operator*()const {      TYPE& operator*()const {
55          return *value;          return *value;
56      }      }
57      // メンバ選択演算子      // メンバ選択演算子
58      TYPE* operator->()const {      TYPE* operator->()const {
59          return value;          return value;
60      }      }
61      // キャスト演算子      // キャスト演算子
62      operator TYPE*()const {      operator TYPE*()const {
63          return value;          return value;
64      }      }
65  };  };
66            
67  // PointerのArray<TYPE>型への特殊化  // PointerのArray<TYPE>型への特殊化
68  // 配列要素演算子[]を提供する  // 配列要素演算子[]を提供する
69  template<class TYPE>  template<class TYPE>
70  class PointerArray : public Pointer< Array<TYPE> > {  class PointerArray : public Pointer< Array<TYPE> > {
71  public:  public:
72      // デフォルトコンストラクタ      // デフォルトコンストラクタ
73      PointerArray() {      PointerArray() {
74      }      }
75      // 初期値付きコンストラクタ      // 初期値付きコンストラクタ
76      PointerArray(Array<TYPE>* ptr):Pointer< Array<TYPE> >(ptr) {      PointerArray(Array<TYPE>* ptr):Pointer< Array<TYPE> >(ptr) {
77      }      }
78      // コピーコンストラクタ      // コピーコンストラクタ
79      PointerArray(const PointerArray& ptr):Pointer< Array<TYPE> >(ptr) {      PointerArray(const PointerArray& ptr):Pointer< Array<TYPE> >(ptr) {
80      }      }
81      // 代入演算子      // 代入演算子
82      PointerArray& operator=(Array<TYPE>* ptr) {      PointerArray& operator=(Array<TYPE>* ptr) {
83          set(ptr);          set(ptr);
84          return *this;          return *this;
85      }      }
86      // 配列要素演算子      // 配列要素演算子
87      TYPE& operator[](int index) {      TYPE& operator[](int index) {
88          Array<TYPE>* ptr = *this;          Array<TYPE>* ptr = *this;
89          return (**this)[index];          return (**this)[index];
90      }      }
91      TYPE operator[](int index)const {      TYPE operator[](int index)const {
92          Array<TYPE>* ptr = *this;          Array<TYPE>* ptr = *this;
93          return (**this)[index];          return (**this)[index];
94      }      }
95  };  };
96            
97  }  }
98    
99  #endif//_YCL_POINTER_H_  #endif//_YCL_POINTER_H_

Legend:
Removed from v.3226  
changed lines
  Added in v.3227

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26