【说明】策略模式的C语言实现,实现了3种排序算法的灵活切换。
【代码清单】
typedef.h
/*
Author : tandesir
Time : 2013-03-09
借鉴Li XianJing部分代码, 感谢 Li XianJing <xianjimli@hotmail.com>
欢迎访问 http://blog.youkuaiyun.com/tandesir
*/
#ifndef __TYPEDEF_H__
#define __TYPEDEF_H__
#include <stdio.h>
enum
{
RET_OK,
RET_FAIL
};
#ifdef __cplusplus
#define DECLS_BEGIN extern "C" {
#define DECLS_END }
#else
#define DECLS_BEGIN
#define DECLS_END
#endif/* __cplusplus */
#define DEBUG_PRINT(FORMAT, VALUE) printf("File %s line %d: "\
#VALUE " = " FORMAT "\n"\
,__FILE__, __LINE__,VALUE\
);
#define LENGTH(array) (sizeof(array)/sizeof(array[0]))
#define return_if_fail(p) if(!(p)) \
{printf("%s : %d Warning : "#p" failed.\n",\
__func__, __LINE__); return ;}
#define return_val_if_fail(p, ret) if(!(p))\
{printf("%s : %d Warning : "#p" failed.\n",\
__func__, __LINE__); return (ret);}
#define SAFE_FREE(p) if(p != NULL){free(p); p = NULL;}
#endif/*__TYPEDEF_H__*/
sort.h
#ifndef __SORT_H__
#define __SORT_H__
#include "typedef.h"
#include "cmp.h"
DECLS_BEGIN
struct _Sort;
typedef struct _Sort Sort;
struct _Sort
{
int (*sort)(int arr[], size_t count, DataCompare cmp);
void (*destroy)(void *thiz);
};
static inline int sort(Sort *thiz, DataCompare cmp, int arr[], size_t count)
{
return_val_if_fail(thiz != NULL, RET_FAIL);
if(thiz->sort != NULL)
{
return thiz->sort(arr, count, cmp);
}
return RET_OK;
}
static inline void sorter_destroy(Sort *thiz)
{
return_if_fail(thiz != NULL);
if(thiz->destroy != NULL)
{
return thiz->destroy(thiz);
}
}
DECLS_END
#endif
bubble_sort.h
/*
Author : tandesir
Time : 2013-03-09
借鉴Li XianJing部分代码, 感谢 Li XianJing <xianjimli@hotmail.com>
欢迎访问 http://blog.youkuaiyun.com/tandesir
*/
#ifndef __BUBBLE_SORT_H__
#define __BUBBLE_SORT_H__
#include "typedef.h"
#include "sort.h"
#include "cmp.h"