| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 | 43 |
| 44 #define O3D_NAMESPACE "o3d" | 44 #define O3D_NAMESPACE "o3d" |
| 45 #define O3D_NAMESPACE_SEPARATOR "." | 45 #define O3D_NAMESPACE_SEPARATOR "." |
| 46 | 46 |
| 47 // Macro to provide a uniform prefix for all string constants created by | 47 // Macro to provide a uniform prefix for all string constants created by |
| 48 // o3d. We reserve this prefix so that we never overwrite a user | 48 // o3d. We reserve this prefix so that we never overwrite a user |
| 49 // created Transform, RenderNode, Param, Effect, State etc. | 49 // created Transform, RenderNode, Param, Effect, State etc. |
| 50 #define O3D_STRING_CONSTANT(value) \ | 50 #define O3D_STRING_CONSTANT(value) \ |
| 51 (O3D_NAMESPACE O3D_NAMESPACE_SEPARATOR value) | 51 (O3D_NAMESPACE O3D_NAMESPACE_SEPARATOR value) |
| 52 | 52 |
| 53 |
| 53 // This macro declares the necessary functions for the type mechanism to work. | 54 // This macro declares the necessary functions for the type mechanism to work. |
| 54 // It needs to be used in each of the definition of any class that derives from | 55 // It needs to be used in each of the definition of any class that derives from |
| 55 // ObjectBase. | 56 // ObjectBase. |
| 56 // CLASS is the class being defined, BASE is its base class. | 57 // CLASS is the class being defined, BASE is its base class. |
| 57 #define O3D_DECL_CLASS(CLASS, BASE) \ | 58 #define O3D_OBJECT_BASE_DECL_CLASS(CLASS, BASE) \ |
| 58 public: \ | 59 public: \ |
| 59 static const ObjectBase::Class *GetApparentClass() { return &class_; } \ | 60 static const ObjectBase::Class *GetApparentClass() { return &class_; } \ |
| 60 static const String GetApparentClassName() { \ | 61 static const String GetApparentClassName() { \ |
| 61 return class_.name(); \ | 62 return class_.name(); \ |
| 62 } \ | 63 } \ |
| 63 virtual const ObjectBase::Class *GetClass() const { \ | 64 virtual const ObjectBase::Class *GetClass() const { \ |
| 64 return GetApparentClass(); \ | 65 return GetApparentClass(); \ |
| 65 } \ | 66 } \ |
| 66 virtual String GetClassName() const { \ | 67 virtual String GetClassName() const { \ |
| 67 return GetApparentClass()->name(); \ | 68 return GetApparentClass()->name(); \ |
| 68 } \ | 69 } \ |
| 69 private: \ | 70 private: \ |
| 70 static ObjectBase::Class class_; | 71 static ObjectBase::Class class_; |
| 71 | 72 |
| 72 // This macro defines the class descriptor for the type mechanism. It needs to | 73 // This macro defines the class descriptor for the type mechanism. It needs to |
| 73 // be used once in the definition file of any class that derives from | 74 // be used once in the definition file of any class that derives from |
| 74 // ObjectBase. | 75 // ObjectBase. |
| 76 // CLASSNAME is the name to use to identify the class. |
| 77 // CLASS is the class being defined. |
| 78 // BASE is its base class. |
| 79 #define O3D_OBJECT_BASE_DEFN_CLASS(CLASSNAME, CLASS, BASE) \ |
| 80 ObjectBase::Class CLASS::class_ = { CLASSNAME, BASE::GetApparentClass() }; |
| 81 |
| 82 // This macro declares the necessary functions for the type mechanism to work. |
| 83 // It needs to be used in each of the definition of any class that derives from |
| 84 // ObjectBase. |
| 85 // CLASS is the class being defined, BASE is its base class. |
| 86 #define O3D_DECL_CLASS(CLASS, BASE) O3D_OBJECT_BASE_DECL_CLASS(CLASS, BASE) |
| 87 |
| 88 // This macro defines the class descriptor for the type mechanism. It needs to |
| 89 // be used once in the definition file of any class that derives from |
| 90 // ObjectBase. |
| 75 // CLASS is the class being defined, BASE is its base class. | 91 // CLASS is the class being defined, BASE is its base class. |
| 76 #define O3D_DEFN_CLASS(CLASS, BASE) \ | 92 #define O3D_DEFN_CLASS(CLASS, BASE) \ |
| 77 ObjectBase::Class CLASS::class_ = \ | 93 O3D_OBJECT_BASE_DEFN_CLASS(O3D_STRING_CONSTANT(#CLASS), CLASS, BASE) |
| 78 { O3D_STRING_CONSTANT(#CLASS), BASE::GetApparentClass() }; | |
| 79 | 94 |
| 80 namespace o3d { | 95 namespace o3d { |
| 81 | 96 |
| 82 class ServiceLocator; | 97 class ServiceLocator; |
| 83 | 98 |
| 84 // class ObjectBase: base of O3D run-time objects. | 99 // class ObjectBase: base of O3D run-time objects. |
| 85 // This class provides the basic functionality for all O3D objects, in | 100 // This class provides the basic functionality for all O3D objects, in |
| 86 // particular so that the JavaScript interface is functional and safe: | 101 // particular so that the JavaScript interface is functional and safe: |
| 87 // - unique id, as a safe reference to the instance. The id -> instance mapping | 102 // - unique id, as a safe reference to the instance. The id -> instance mapping |
| 88 // is handled by the Client. | 103 // is handled by the Client. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 struct Class { | 150 struct Class { |
| 136 public: | 151 public: |
| 137 const Class* parent() const { | 152 const Class* parent() const { |
| 138 return parent_; | 153 return parent_; |
| 139 } | 154 } |
| 140 | 155 |
| 141 const char* name() const { | 156 const char* name() const { |
| 142 return name_; | 157 return name_; |
| 143 } | 158 } |
| 144 | 159 |
| 145 const char* unqualified_name() const { | 160 const char* unqualified_name() const; |
| 146 return name_ + sizeof(O3D_NAMESPACE) + | |
| 147 sizeof(O3D_NAMESPACE_SEPARATOR) - 2; | |
| 148 } | |
| 149 | 161 |
| 150 public: | 162 public: |
| 151 // The name of the class. | 163 // The name of the class. |
| 152 const char *name_; | 164 const char *name_; |
| 153 // The base class descriptor. | 165 // The base class descriptor. |
| 154 const Class *parent_; | 166 const Class *parent_; |
| 155 }; | 167 }; |
| 156 | 168 |
| 157 explicit ObjectBase(ServiceLocator* service_locator); | 169 explicit ObjectBase(ServiceLocator* service_locator); |
| 158 virtual ~ObjectBase(); | 170 virtual ~ObjectBase(); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 inline Id GetObjectId(const ObjectBase* object) { | 234 inline Id GetObjectId(const ObjectBase* object) { |
| 223 return object == NULL ? 0 : object->id(); | 235 return object == NULL ? 0 : object->id(); |
| 224 } | 236 } |
| 225 | 237 |
| 226 // Array container for ObjectBase pointers | 238 // Array container for ObjectBase pointers |
| 227 typedef std::vector<ObjectBase*> ObjectBaseArray; | 239 typedef std::vector<ObjectBase*> ObjectBaseArray; |
| 228 | 240 |
| 229 } // namespace o3d | 241 } // namespace o3d |
| 230 | 242 |
| 231 #endif // O3D_CORE_CROSS_OBJECT_BASE_H__ | 243 #endif // O3D_CORE_CROSS_OBJECT_BASE_H__ |
| OLD | NEW |