A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://yazgoo.github.io/fuse_kafka/html/time__queue_8c_source.html below:

fuse_kafka: src/time_queue.c Source File

Go to the documentation of this file.
00001 
00006 #ifndef TIME_QUEUE_C
00007 #define TIME_QUEUE_C
00008 #include <stdlib.h>
00009 #include <stdio.h>
00010 #include "time_queue.h"
00021 unsigned long time_queue_hash(unsigned char *str)
00022 {
00023     unsigned long hash = 5381;
00024     int c;
00025     while (c = *str++) hash = ((hash << 5) + hash) + c;
00026     return hash;
00027 }
00042 time_queue* time_queue_new(unsigned int size, unsigned int quota)
00043 {
00044     int i;
00045     time_queue* queue = (time_queue*) malloc(sizeof(time_queue));
00046     queue->values = (unsigned long*) malloc(size * sizeof(long*));
00047     queue->hashes = (unsigned long*) malloc(size * sizeof(long*));
00048     queue->size = size;
00049     queue->quota = quota;
00050     queue->i = 0;
00051     for(i = 0; i < size; i++)
00052     {
00053         queue->values[i] = queue->hashes[i] = 0;
00054     }
00055     return queue;
00056 }
00060 unsigned long time_queue_time()
00061 {
00062     struct timeval tv;
00063     gettimeofday(&tv, NULL);
00064     return tv.tv_sec * 1000000 + tv.tv_usec;
00065 }
00075 void time_queue_set(time_queue* queue, char* key)
00076 {
00077     int i, found;
00078     unsigned long hash = time_queue_hash(key);
00079     for(i = found = 0; i < queue->size; i++)
00080     {
00081         if(hash == queue->hashes[i])
00082         {
00083             found = 1;
00084             break;
00085         }
00086     }
00087     if(!found)
00088     {
00089         queue->i += 1;
00090         queue->i = queue->i % queue->size;
00091         i = queue->i;
00092         queue->hashes[i] = hash;
00093     }
00094     queue->values[i] = time_queue_time();
00095 }
00110 unsigned long* time_queue_get(time_queue* queue, char* key)
00111 {
00112     int i;
00113     unsigned long hash = time_queue_hash(key);
00114     for(i = 0; i < queue->size; i++)
00115     {
00116         if(hash == queue->hashes[i])
00117             return queue->values + i;
00118     }
00119     return NULL;
00120 }
00137 int time_queue_overflows(time_queue* queue, char* key, unsigned int size)
00138 {
00139     unsigned long* time = time_queue_get(queue, key);
00140     if(time == NULL) return 0;
00141     unsigned long dt = (time_queue_time() - *time);
00142     if(dt == 0) return 1;
00143     return (((float) size * 1000000 / dt) > ((float)queue->quota));
00144 }
00149 void time_queue_delete(time_queue* queue)
00150 {
00151     free(queue->values);
00152     free(queue->hashes);
00153     free(queue);
00154 }
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164 
00165 
00166 
00167 
00168 #endif

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4