Advertisement
kolbka_

Untitled

Jul 7th, 2023
802
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <atomic>
  4. #include <vector>
  5. #include <memory>
  6.  
  7. class RequestLimiter {
  8. public:
  9.     RequestLimiter(std::atomic_int &rl) : rl(rl) {
  10.         rl.fetch_add(1);
  11.     }
  12.  
  13.     bool isLimitExceeded() {
  14.         return rl.load() > 10;
  15.     }
  16.  
  17.     ~RequestLimiter() {
  18.         rl.fetch_sub(1);
  19.     }
  20.  
  21. private:
  22.     std::atomic_int &rl;
  23. };
  24.  
  25. class RLStore {
  26. public:
  27.     explicit RLStore(uint size) : rls(size) {
  28.     }
  29.  
  30.     uint createRL() {
  31.         int id = available_id++;
  32.         if (id >= rls.size()) {
  33.             throw std::runtime_error("RLStore: id is greater than size");
  34.         }
  35.         return id;
  36.     }
  37.  
  38.     std::atomic_int &getRL(uint id) {
  39.         if (id >= rls.size()) {
  40.             throw std::runtime_error("RLStore: id is greater than size");
  41.         }
  42.         return rls[id];
  43.     }
  44.  
  45. private:
  46.     uint available_id = 0;
  47.     std::vector<std::atomic_int> rls;
  48. };
  49.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement