| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | #include <osg/UserDataContainer> |
|---|
| 14 | |
|---|
| 15 | namespace osg |
|---|
| 16 | { |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | |
|---|
| 22 | UserDataContainer::UserDataContainer(): |
|---|
| 23 | Object(true) |
|---|
| 24 | { |
|---|
| 25 | } |
|---|
| 26 | |
|---|
| 27 | UserDataContainer::UserDataContainer(const UserDataContainer& udc, const osg::CopyOp& copyop): |
|---|
| 28 | Object(udc, copyop) |
|---|
| 29 | { |
|---|
| 30 | } |
|---|
| 31 | |
|---|
| 32 | Object* UserDataContainer::getUserObject(const std::string& name, unsigned int startPos) |
|---|
| 33 | { |
|---|
| 34 | return getUserObject(getUserObjectIndex(name, startPos)); |
|---|
| 35 | } |
|---|
| 36 | |
|---|
| 37 | const Object* UserDataContainer::getUserObject(const std::string& name, unsigned int startPos) const |
|---|
| 38 | { |
|---|
| 39 | return getUserObject(getUserObjectIndex(name, startPos)); |
|---|
| 40 | } |
|---|
| 41 | |
|---|
| 42 | |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | |
|---|
| 46 | DefaultUserDataContainer::DefaultUserDataContainer() |
|---|
| 47 | { |
|---|
| 48 | } |
|---|
| 49 | |
|---|
| 50 | DefaultUserDataContainer::DefaultUserDataContainer(const DefaultUserDataContainer& udc, const osg::CopyOp& copyop): |
|---|
| 51 | UserDataContainer(udc, copyop) |
|---|
| 52 | { |
|---|
| 53 | _userData = udc._userData; |
|---|
| 54 | _descriptionList = udc._descriptionList; |
|---|
| 55 | for(ObjectList::const_iterator itr = udc._objectList.begin(); |
|---|
| 56 | itr != udc._objectList.end(); |
|---|
| 57 | ++itr) |
|---|
| 58 | { |
|---|
| 59 | _objectList.push_back(copyop(itr->get())); |
|---|
| 60 | } |
|---|
| 61 | } |
|---|
| 62 | |
|---|
| 63 | void DefaultUserDataContainer::setThreadSafeRefUnref(bool threadSafe) |
|---|
| 64 | { |
|---|
| 65 | Object::setThreadSafeRefUnref(threadSafe); |
|---|
| 66 | |
|---|
| 67 | if (_userData.valid()) _userData->setThreadSafeRefUnref(threadSafe); |
|---|
| 68 | |
|---|
| 69 | for(ObjectList::iterator itr = _objectList.begin(); |
|---|
| 70 | itr != _objectList.end(); |
|---|
| 71 | ++itr) |
|---|
| 72 | { |
|---|
| 73 | (*itr)->setThreadSafeRefUnref(threadSafe); |
|---|
| 74 | } |
|---|
| 75 | } |
|---|
| 76 | |
|---|
| 77 | void DefaultUserDataContainer::setUserData(Referenced* obj) |
|---|
| 78 | { |
|---|
| 79 | _userData = obj; |
|---|
| 80 | } |
|---|
| 81 | |
|---|
| 82 | Referenced* DefaultUserDataContainer::getUserData() |
|---|
| 83 | { |
|---|
| 84 | return _userData.get(); |
|---|
| 85 | } |
|---|
| 86 | |
|---|
| 87 | const Referenced* DefaultUserDataContainer::getUserData() const |
|---|
| 88 | { |
|---|
| 89 | return _userData.get(); |
|---|
| 90 | } |
|---|
| 91 | |
|---|
| 92 | unsigned int DefaultUserDataContainer::addUserObject(Object* obj) |
|---|
| 93 | { |
|---|
| 94 | |
|---|
| 95 | unsigned int i = getUserObjectIndex(obj); |
|---|
| 96 | if (i<_objectList.size()) |
|---|
| 97 | { |
|---|
| 98 | |
|---|
| 99 | return i; |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | unsigned int pos = _objectList.size(); |
|---|
| 103 | |
|---|
| 104 | |
|---|
| 105 | _objectList.push_back(obj); |
|---|
| 106 | |
|---|
| 107 | return pos; |
|---|
| 108 | } |
|---|
| 109 | |
|---|
| 110 | void DefaultUserDataContainer::removeUserObject(unsigned int i) |
|---|
| 111 | { |
|---|
| 112 | if (i<_objectList.size()) |
|---|
| 113 | { |
|---|
| 114 | _objectList.erase(_objectList.begin()+i); |
|---|
| 115 | } |
|---|
| 116 | } |
|---|
| 117 | |
|---|
| 118 | void DefaultUserDataContainer::setUserObject(unsigned int i, Object* obj) |
|---|
| 119 | { |
|---|
| 120 | if (i<_objectList.size()) |
|---|
| 121 | { |
|---|
| 122 | _objectList[i] = obj; |
|---|
| 123 | } |
|---|
| 124 | } |
|---|
| 125 | |
|---|
| 126 | Object* DefaultUserDataContainer::getUserObject(unsigned int i) |
|---|
| 127 | { |
|---|
| 128 | if (i<_objectList.size()) |
|---|
| 129 | { |
|---|
| 130 | return _objectList[i].get(); |
|---|
| 131 | } |
|---|
| 132 | return 0; |
|---|
| 133 | } |
|---|
| 134 | |
|---|
| 135 | const Object* DefaultUserDataContainer::getUserObject(unsigned int i) const |
|---|
| 136 | { |
|---|
| 137 | if (i<_objectList.size()) |
|---|
| 138 | { |
|---|
| 139 | return _objectList[i].get(); |
|---|
| 140 | } |
|---|
| 141 | return 0; |
|---|
| 142 | } |
|---|
| 143 | |
|---|
| 144 | unsigned int DefaultUserDataContainer::getNumUserObjects() const |
|---|
| 145 | { |
|---|
| 146 | return _objectList.size(); |
|---|
| 147 | } |
|---|
| 148 | |
|---|
| 149 | unsigned int DefaultUserDataContainer::getUserObjectIndex(const osg::Object* obj, unsigned int startPos) const |
|---|
| 150 | { |
|---|
| 151 | for(unsigned int i = startPos; i < _objectList.size(); ++i) |
|---|
| 152 | { |
|---|
| 153 | if (_objectList[i]==obj) return i; |
|---|
| 154 | } |
|---|
| 155 | return _objectList.size(); |
|---|
| 156 | } |
|---|
| 157 | |
|---|
| 158 | unsigned int DefaultUserDataContainer::getUserObjectIndex(const std::string& name, unsigned int startPos) const |
|---|
| 159 | { |
|---|
| 160 | for(unsigned int i = startPos; i < _objectList.size(); ++i) |
|---|
| 161 | { |
|---|
| 162 | Object* obj = _objectList[i].get(); |
|---|
| 163 | if (obj && obj->getName()==name) return i; |
|---|
| 164 | } |
|---|
| 165 | return _objectList.size(); |
|---|
| 166 | } |
|---|
| 167 | |
|---|
| 168 | void DefaultUserDataContainer::setDescriptions(const DescriptionList& descriptions) |
|---|
| 169 | { |
|---|
| 170 | _descriptionList = descriptions; |
|---|
| 171 | } |
|---|
| 172 | |
|---|
| 173 | UserDataContainer::DescriptionList& DefaultUserDataContainer::getDescriptions() |
|---|
| 174 | { |
|---|
| 175 | return _descriptionList; |
|---|
| 176 | } |
|---|
| 177 | |
|---|
| 178 | const UserDataContainer::DescriptionList& DefaultUserDataContainer::getDescriptions() const |
|---|
| 179 | { |
|---|
| 180 | return _descriptionList; |
|---|
| 181 | } |
|---|
| 182 | |
|---|
| 183 | unsigned int DefaultUserDataContainer::getNumDescriptions() const |
|---|
| 184 | { |
|---|
| 185 | return _descriptionList.size(); |
|---|
| 186 | } |
|---|
| 187 | |
|---|
| 188 | void DefaultUserDataContainer::addDescription(const std::string& desc) |
|---|
| 189 | { |
|---|
| 190 | _descriptionList.push_back(desc); |
|---|
| 191 | } |
|---|
| 192 | |
|---|
| 193 | } |
|---|