CmIReflectable.cpp 778 B

123456789101112131415161718192021222324252627282930
  1. #include "CmIReflectable.h"
  2. #include "CmRTTIType.h"
  3. #include "CmException.h"
  4. namespace CamelotEngine
  5. {
  6. IReflectable* IReflectable::createInstanceFromTypeId(UINT32 rttiTypeId)
  7. {
  8. stack<RTTITypeBase*>::type todo;
  9. vector<RTTITypeBase*>::type& rootClasses = getDerivedClasses();
  10. for(auto iter = rootClasses.begin(); iter != rootClasses.end(); ++iter)
  11. todo.push(*iter);
  12. while(!todo.empty())
  13. {
  14. RTTITypeBase* curType = todo.top();
  15. todo.pop();
  16. if(curType->getRTTIId() == rttiTypeId)
  17. return curType->newRTTIObject();
  18. vector<RTTITypeBase*>::type& derivedClasses = curType->getDerivedClasses();
  19. for(auto iter = derivedClasses.begin(); iter != derivedClasses.end(); ++iter)
  20. todo.push(*iter);
  21. }
  22. return nullptr;
  23. }
  24. }