Advertisement
Guest User

Untitled

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