openscenegraph
UserDataContainer
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_USERDATACONTAINER
15#define OSG_USERDATACONTAINER 1
16
17#include <osg/Object>
18
19#include <string>
20#include <vector>
21
22namespace osg {
23
26{
27 public:
30
31 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const UserDataContainer*>(obj)!=0; }
32
36 virtual const char* libraryName() const { return "osg"; }
37
40 virtual const char* className() const { return "UserDataContainer"; }
41
44 virtual UserDataContainer* asUserDataContainer() { return this; }
45
48 virtual const UserDataContainer* asUserDataContainer() const { return this; }
49
56 virtual void setUserData(Referenced* obj) = 0;
57
59
61 virtual Referenced* getUserData() = 0;
62
64 virtual const Referenced* getUserData() const = 0;
65
67 virtual unsigned int addUserObject(Object* obj) = 0;
68
69 template<class T> unsigned int addUserObject(const osg::ref_ptr<T>& obj) { return addUserObject(obj.get()); }
70
72 virtual void setUserObject(unsigned int i, Object* obj) = 0;
73
75 virtual void removeUserObject(unsigned int i) = 0;
76
77
79 virtual Object* getUserObject(unsigned int i) = 0;
80
82 virtual const Object* getUserObject(unsigned int i) const = 0;
83
85 virtual unsigned int getNumUserObjects() const = 0;
86
88 virtual unsigned int getUserObjectIndex(const osg::Object* obj, unsigned int startPos=0) const = 0;
89
91 virtual unsigned int getUserObjectIndex(const std::string& name, unsigned int startPos=0) const = 0;
92
93
95 virtual Object* getUserObject(const std::string& name, unsigned int startPos=0);
96
98 virtual const Object* getUserObject(const std::string& name, unsigned int startPos=0) const;
99
100
101 typedef std::vector<std::string> DescriptionList;
102
104 virtual void setDescriptions(const DescriptionList& descriptions) = 0;
105
108
110 virtual const DescriptionList& getDescriptions() const = 0;
111
113 virtual unsigned int getNumDescriptions() const = 0;
114
116 virtual void addDescription(const std::string& desc) = 0;
117
118 protected:
120};
121
124{
125 public:
128
130
131
132 virtual void setThreadSafeRefUnref(bool threadSafe);
133
140 virtual void setUserData(Referenced* obj);
141
144
147
149 virtual const Referenced* getUserData() const;
150
152 virtual unsigned int addUserObject(Object* obj);
153
155 virtual void setUserObject(unsigned int i, Object* obj);
156
158 virtual void removeUserObject(unsigned int i);
159
160
162 virtual Object* getUserObject(unsigned int i);
163
165 virtual const Object* getUserObject(unsigned int i) const;
166
168 virtual unsigned int getNumUserObjects() const;
169
171 virtual unsigned int getUserObjectIndex(const osg::Object* obj, unsigned int startPos=0) const;
172
174 virtual unsigned int getUserObjectIndex(const std::string& name, unsigned int startPos=0) const;
175
176
177
178
180 virtual void setDescriptions(const DescriptionList& descriptions);
181
184
186 virtual const DescriptionList& getDescriptions() const;
187
189 virtual unsigned int getNumDescriptions() const;
190
192 virtual void addDescription(const std::string& desc);
193
194protected:
195
197
198 typedef std::vector< osg::ref_ptr<osg::Object> > ObjectList;
199
203};
204
205
207inline Object* getUserObject(osg::Object* object, const std::string& name)
208{
210 return udc ? udc->getUserObject(name) : 0;
211}
212
214inline const Object* getUserObject(const osg::Object* object, const std::string& name)
215{
216 const osg::UserDataContainer* udc = object->getUserDataContainer();
217 return udc ? udc->getUserObject(name) : 0;
218}
219
220}
221
222#endif
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Definition UserDataContainer:124
virtual const Object * getUserObject(unsigned int i) const
virtual unsigned int getUserObjectIndex(const std::string &name, unsigned int startPos=0) const
ObjectList _objectList
Definition UserDataContainer:202
virtual void setUserObject(unsigned int i, Object *obj)
ref_ptr< Referenced > _userData
Definition UserDataContainer:200
virtual void removeUserObject(unsigned int i)
virtual void setDescriptions(const DescriptionList &descriptions)
virtual unsigned int getUserObjectIndex(const osg::Object *obj, unsigned int startPos=0) const
virtual const Referenced * getUserData() const
virtual const DescriptionList & getDescriptions() const
virtual unsigned int addUserObject(Object *obj)
virtual Object * getUserObject(unsigned int i)
virtual unsigned int getNumUserObjects() const
virtual void setUserData(Referenced *obj)
virtual void addDescription(const std::string &desc)
virtual DescriptionList & getDescriptions()
META_Object(osg, DefaultUserDataContainer) virtual void setThreadSafeRefUnref(bool threadSafe)
virtual unsigned int getNumDescriptions() const
DefaultUserDataContainer(const DefaultUserDataContainer &udc, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
std::vector< osg::ref_ptr< osg::Object > > ObjectList
Definition UserDataContainer:198
DescriptionList _descriptionList
Definition UserDataContainer:201
virtual ~DefaultUserDataContainer()
Definition UserDataContainer:196
virtual Referenced * getUserData()
Definition Object:61
osg::UserDataContainer * getUserDataContainer()
Definition Object:243
virtual void setUserData(Referenced *obj)
Definition Referenced:44
Definition UserDataContainer:26
virtual UserDataContainer * asUserDataContainer()
Definition UserDataContainer:44
virtual bool isSameKindAs(const Object *obj) const
Definition UserDataContainer:31
virtual void addDescription(const std::string &desc)=0
virtual const Referenced * getUserData() const =0
virtual unsigned int addUserObject(Object *obj)=0
virtual const char * libraryName() const
Definition UserDataContainer:36
virtual DescriptionList & getDescriptions()=0
virtual const char * className() const
Definition UserDataContainer:40
virtual unsigned int getNumUserObjects() const =0
virtual unsigned int getNumDescriptions() const =0
UserDataContainer(const UserDataContainer &udc, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
std::vector< std::string > DescriptionList
Definition UserDataContainer:101
virtual unsigned int getUserObjectIndex(const osg::Object *obj, unsigned int startPos=0) const =0
virtual const Object * getUserObject(const std::string &name, unsigned int startPos=0) const
virtual const DescriptionList & getDescriptions() const =0
virtual Referenced * getUserData()=0
unsigned int addUserObject(const osg::ref_ptr< T > &obj)
Definition UserDataContainer:69
virtual const Object * getUserObject(unsigned int i) const =0
virtual void setUserData(Referenced *obj)=0
virtual ~UserDataContainer()
Definition UserDataContainer:119
virtual void removeUserObject(unsigned int i)=0
virtual Object * getUserObject(const std::string &name, unsigned int startPos=0)
virtual unsigned int getUserObjectIndex(const std::string &name, unsigned int startPos=0) const =0
virtual void setDescriptions(const DescriptionList &descriptions)=0
virtual void setUserObject(unsigned int i, Object *obj)=0
virtual const UserDataContainer * asUserDataContainer() const
Definition UserDataContainer:48
virtual Object * getUserObject(unsigned int i)=0
Definition ref_ptr:32
T * get() const
Definition ref_ptr:117
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
Object * getUserObject(osg::Object *object, const std::string &name)
Definition UserDataContainer:207
#define OSG_EXPORT
Definition osg/Export:39