用链表解决if语句过多的问题(C/C++实现)(二)

2014-11-24 08:40:38 · 作者: · 浏览: 1
i++;
}
TEST(NODE,makeListWithArray){
int i;
int data[] = {1,2,3};
void *aSet[] = {&data[0], &data[1], &data[2]};
Node *list = makeListWithArray(aSet, 3);
foreach(list, printNode);
}
复制代码
程序入口实现(main.c)
复制代码
#include
#include
#include "message.h"
#include "node.h"
# define FALSE 0
# define TRUE 1
typedef int BOOL;
typedef BOOL (*FuncIsAllowSend)(Message *, Node*);
BOOL isAllowSendCheckDate(Message *message, Node *node)
{
FuncIsAllowSend isAllowSend = NULL;
if(strcmp(message->date, "20130101") == 0)
{
return FALSE;
}
isAllowSend = (FuncIsAllowSend) node->next->ptr;
return isAllowSend(message, node->next);
}
BOOL isAllowSendCheckWhiteList(Message *message, Node *node)
{
FuncIsAllowSend isAllowSend = NULL;
if(message->sender == 10)
{
return TRUE;
}
isAllowSend = (FuncIsAllowSend) node->next->ptr;
return isAllowSend(message, node->
next);
}
BOOL isAllowSendWithDefault(Message *message, Node *node)
{
setChargeFlag(message);
return TRUE;
}
int main()
{
Message *message = makeMessage(1,"20131212");
void *actionList[] = {(void*)&isAllowSendCheckDate,
(void*)&isAllowSendCheckWhiteList,
(void*)&isAllowSendWithDefault};
Node *theList = makeListWithArray(actionList, sizeof(actionList)/4);
FuncIsAllowSend isAllowSend = (FuncIsAllowSend)theList->ptr;
if(isAllowSend(message, theList) == TRUE)
{
setSendFlag(message);
}
printf("%s\n",format(message));
}
复制代码
代码风格其实是C风格,但是因为要使用gtest不得不使用了g++对程序进行编译调试,命令如下:
复制代码
# 前提:我已经把gtest编译成库放在了 系统目录下
g++ -c message.c
g++ -c testMessage.c
g++ message.o testMessage.o -lgtest -lpthread
./a.out
g++ -c node.c
g++ -c testNode.c
g++ node.o testNode.o -lgtest -lpthread
./a.out
g++ -c main.c
g++ message.o node.o main.o
./a.out