Objective-C token bucket rate limiter in plain C
Objective-C
#import <Foundation/Foundation.h>
#import <math.h>
typedef struct {
double capacity;
double tokens;
double rate;
NSTimeInterval last;
} TokenBucket;
static void BucketInit(TokenBucket *b, double capacity, double rate) {
b->capacity = capacity; b->tokens = capacity; b->rate = rate;
b->last = [NSDate date].timeIntervalSince1970;
}
static BOOL BucketTake(TokenBucket *b, double amount) {
NSTimeInterval now = [NSDate date].timeIntervalSince1970;
b->tokens = fmin(b->capacity, b->tokens + (now - b->last) * b->rate);
b->last = now;
if (b->tokens < amount) return NO;
b->tokens -= amount;
return YES;
}