cache_double_list

#ifndef _DOUBLE_LIST_CACHE_H_
#define _DOUBLE_LIST_CACHE_H_

#define NODE_SIZE 128

typedef struct _cnode {
	int m_data[NODE_SIZE];
	int m_start;
	int m_finish;
	int m_index;
	struct _cnode* m_prev;
	struct _cnode* m_next;
} cnode_t;

void cache_creater (cnode_t** head, int cachesize);
void cache_acquire (cnode_t** head, cnode_t** node);
void cache_release (cnode_t** head, cnode_t* node);
void cache_destroy (cnode_t** head);

#endif


#include "doublelistcache.h"
#include <malloc.h>
#include <string.h>
#include <stdio.h>

void cache_creater (cnode_t** head, int cachesize) {
	int nodeNum, cusor;
	cnode_t *node, **cusornode;
	cusornode = &node;
	nodeNum = cachesize / NODE_SIZE;
	for (cusor = 0; cusor < nodeNum; ++cusor) {
		*cusornode = (cnode_t*)malloc(sizeof(cnode_t));
		memset ((*cusornode)->m_data, 0, NODE_SIZE);
		(*cusornode)->m_start = 0;
		(*cusornode)->m_finish = 0;
		(*cusornode)->m_next = 0;
		(*cusornode)->m_prev = 0;
		(*cusornode)->m_index = cusor;
		cusornode = &(*cusornode)->m_next;
	}
	*head = node;
}

void cache_acquire (cnode_t** head, cnode_t** node) {
	if (!(*head)) {
		*node = 0;
	}
	*node = *head;
	*head = (*head)->m_next;
}

void cache_release (cnode_t** head, cnode_t* node) {
	if (node) {
		node->m_next = *head;
		(*head)->m_prev = node;
		*head = node;
	}
}

void cache_destroy (cnode_t** head) {
	cnode_t *cusor, *tmp;
	cusor = *head;
	while (cusor) {
		tmp = cusor;
		cusor = cusor->m_next;
		free (tmp);
	}
	*head = 0;
}

void cache_display (cnode_t* head) {
	while (head) {
		printf ("index = %d\n",head->m_index);
		head = head->m_next;
	}
}

int main () {
	cnode_t* head;
	cnode_t* result;
	cache_creater (&head, 1024);
	cache_display (head);
	cache_acquire (&head, &result);
	printf ("-------------------\n");
	cache_display (head);
	printf ("%d\n", result->m_index);
	printf ("-------------------\n");
	cache_release (&head, result);
	cache_display (head);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值