pastebin

calling function
  1. #include<bits/stdc++.h>
  2. #include<chrono>
  3. using namespace std;
  4.  
  5. class Server {
  6.         public:
  7.                 void func1() {
  8.                         cout << "calling function 1" << endl;
  9.                 }
  10.                 void func2() {
  11.                         cout << "calling function 2" << endl;
  12.                 }
  13.                 map <string, long> config;
  14.                 Server(map<string, long> mp) {
  15.                         config = mp;
  16.                 }
  17.                
  18. };
  19.  
  20. class RateLimitter {
  21.         public:
  22.                 RateLimitter(Server *server, int numberOfTimes, string functionCalled) {
  23.                         limit = numberOfTimes;
  24.                         counter = 0;
  25.                         myServer =  server;
  26.                         rate = (myServer->config)[functionCalled];
  27.                         start_time = time(null);
  28.                         while (requestAllowed()) {
  29.                                 if (functionCalled == "func1") {
  30.                                         myServer->func1();
  31.                                 } else {
  32.                                         myServer->func2();
  33.                                 }
  34.                         }
  35.                 }
  36.         private:
  37.                 bool requestAllowed() {
  38.                         while (counter < limit) {
  39.                                 uint32_t current_time = time(null);
  40.                                 if (current_time >= start_time + 1000) {
  41.                                         start_time = current_time;
  42.                                         return false;
  43.                                 }
  44.                                 counter++;
  45.                                 if (counter <= rate) {
  46.                                         return true;
  47.                                 } else {
  48.                                         return false;
  49.                                 }
  50.                         }
  51.                 }
  52.                
  53.                 int limit, counter, rate;
  54.                 uint32_t start_time;
  55.                 Server *myServer;
  56. };
  57.  
  58. int main() {
  59.         map<string , long> mp;
  60.         mp["func1"] = 5;
  61.         mp["func2"] =3;
  62.     auto begin = chrono::high_resolution_clock::now();    
  63.         Server server(mp);
  64.         cout<< time(null) <<endl;
  65.         RateLimitter rateLimit(&server, 5, "func1");
  66.         RateLimitter rateLimit1(&server, 5, "func2");
  67.         RateLimitter rateLimit2(&server, 10, "func1");
  68. cout<< time(null) <<endl;
  69. auto end = chrono::high_resolution_clock::now();    
  70.  
  71.     auto dur = end - begin;
  72.  
  73. auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(dur).count();
  74.         cout <<ms<<endl;
  75.         return 0;
  76. }
Parsed in 0.014 seconds