Advertisement
Guest User

Untitled

a guest
May 27th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include <SFML\Graphics.hpp>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. const int testCount = 100;
  8.  
  9. //base class
  10. class GameObject : public sf::Sprite
  11. {
  12. private:
  13.  
  14. public:
  15.  
  16.     enum Type
  17.     {
  18.         actor,
  19.         other
  20.     } type;
  21.  
  22. };
  23.  
  24. //class we're casting
  25. class Actor : public GameObject
  26. {
  27. private:
  28.  
  29. public:
  30.     Actor()
  31.     {
  32.         type = actor;
  33.     }
  34.     sf::Vector2f velocity;
  35. };
  36.  
  37. //creates objects
  38. void CreateObjects(vector<GameObject*>& objects, const int max_objects)
  39. {
  40.     for (int i = 0; i < max_objects; i++)
  41.     {
  42.         objects.push_back(new GameObject);
  43.     }
  44. }
  45.  
  46. //checks every object if it's equal to actor
  47. void StaticCast(vector<GameObject*>& objects)
  48. {
  49.     for (auto it = objects.begin(); it != objects.end(); it++)
  50.     {
  51.         if ((*it)->type == GameObject::actor)
  52.         {
  53.             Actor* actor = static_cast<Actor*>(*it);
  54.  
  55.             actor->setPosition(sf::Vector2f(50, 50));
  56.         }
  57.     }
  58. }
  59.  
  60. void DynamicCast(vector<GameObject*>& objects)
  61. {
  62.     for (auto it = objects.begin(); it != objects.end(); it++)
  63.     {
  64.         Actor* actor = dynamic_cast<Actor*>(*it);
  65.  
  66.         if (actor)
  67.         {
  68.             actor->setPosition(sf::Vector2f(50, 50));
  69.         }
  70.     }
  71. }
  72.  
  73. void DeleteObjects(std::vector<GameObject*>& objects)
  74. {
  75.     for (auto it = objects.begin(); it != objects.end(); it++)
  76.     {
  77.         delete *it;
  78.     }
  79.     objects.clear();
  80. }
  81.  
  82. struct Times
  83. {
  84.     sf::Time averageDynamic;
  85.     sf::Time averageStatic;
  86. };
  87.  
  88. Times AverageTimes(sf::Time dynamicTimes[testCount], sf::Time staticTimes[testCount])
  89. {
  90.     sf::Time averageDynamic;
  91.     sf::Time averageStatic;
  92.  
  93.     for (int i = 0; i < testCount; i++)
  94.     {
  95.         averageDynamic += dynamicTimes[i];
  96.         averageStatic += staticTimes[i];
  97.     }
  98.     __int64 tCount = testCount;
  99.  
  100.     averageDynamic /= tCount;
  101.     averageStatic /= tCount;
  102.  
  103.     Times times;
  104.     times.averageDynamic = averageDynamic;
  105.     times.averageStatic = averageStatic;
  106.  
  107.     return times;
  108. }
  109.  
  110. void TestLoop(vector<GameObject*>& objects, const int max_objects)
  111. {
  112.     sf::Time dynamicTimes[testCount];
  113.     sf::Time staticTimes[testCount];
  114.  
  115.     sf::Clock clock;
  116.  
  117.     for (int i = 0; i < testCount; i++)
  118.     {
  119.         CreateObjects(objects, max_objects);
  120.  
  121.         clock.restart();
  122.  
  123.         DynamicCast(objects);
  124.  
  125.         dynamicTimes[i] = clock.getElapsedTime();
  126.  
  127.         DeleteObjects(objects);
  128.  
  129.         clock.restart();
  130.  
  131.         StaticCast(objects);
  132.  
  133.         staticTimes[i] = clock.getElapsedTime();
  134.  
  135.         DeleteObjects(objects);
  136.  
  137.         std::cout << "done: " << i << endl;
  138.     }
  139.  
  140.     Times times;
  141.     times = AverageTimes(dynamicTimes, staticTimes);
  142.    
  143.     system("cls");
  144.  
  145.     std::cout << "Average Dynamic: " << times.averageDynamic.asMicroseconds() << endl
  146.         << "Average Static: " << times.averageStatic.asMicroseconds() << endl;
  147. }
  148.  
  149. int main()
  150. {
  151.     vector<GameObject*> objects;
  152.  
  153.     const int max_objects = 1000;
  154.  
  155.     TestLoop(objects, max_objects);
  156.    
  157.  
  158.     cin.get();
  159.  
  160.     return 0;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement