看memcached的源码写的,虽然很粗糙,但是基本思想还是有的,自娱自乐,后期不断改进。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct st{
void * start;
void * end;
char ptr[10];
};
struct it{
struct it* prev;
struct it* next;
int key;
int value;
int used;
};
void add(struct it* t,const int data)
{
while(t->next)
{
if(!t->used){
t->value=data;
t->used=1;
return;
}
t++;
}
}
void del(struct it* t,const int data)
{
while(t->next)
{
if(t->used&&t->value==data){
t->used=0;
t->value=0;
return;
}
t++;
}
}
main(){
void * slabs=malloc(200);
struct st* pst;
struct it* pit;
int i,k1,k2,k3;
memset(slabs,0,200);
pst=(struct st*)slabs;
pit=(struct it*)(pst+1);
pit->prev=0;
pit->key=1;
pit->value=0;
pit->used=0;
for(i=1;i<10;i++){
pit=pit+1;
pit->key=i+1;
pit->value=0;
pit->used=0;
pit->prev=pit-1;
pit->prev->next=pit;
pit->next=NULL;
}
pit=(struct it*)(pst+1);
k1=11;
k2=22;
k3=33;
add(pit,k1);
add(pit,k2);
add(pit,k3);
del(pit,k2);
return 0;
}