Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <atomic>
- #include <vector>
- #include <memory>
- class RequestLimiter {
- public:
- RequestLimiter(std::atomic_int &rl) : rl(rl) {
- rl.fetch_add(1);
- }
- bool isLimitExceeded() {
- return rl.load() > 10;
- }
- ~RequestLimiter() {
- rl.fetch_sub(1);
- }
- private:
- std::atomic_int &rl;
- };
- class RLStore {
- public:
- explicit RLStore(uint size) : rls(size) {
- }
- uint createRL() {
- int id = available_id++;
- if (id >= rls.size()) {
- throw std::runtime_error("RLStore: id is greater than size");
- }
- return id;
- }
- std::atomic_int &getRL(uint id) {
- if (id >= rls.size()) {
- throw std::runtime_error("RLStore: id is greater than size");
- }
- return rls[id];
- }
- private:
- uint available_id = 0;
- std::vector<std::atomic_int> rls;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement