设为首页 加入收藏

TOP

用链表解决if语句过多的问题(二)
2014-02-14 12:51:44 来源: 作者: 【 】 浏览:193
Tags:解决 语句 过多 问题

 

  Node *last = NULL;

  assert(array != NULL && length > 0);

  for(i = length - 1; i >= 0; i--)

  {

  Node *node = (Node*)malloc(sizeof(Node));

  node->ptr  = array[i];

  node->next = last;

  last = node;

  }

  return last;

  }

  void foreach(Node *list, void (*process) (Node *))

  {

  Node *current = NULL;

  assert(list != NULL && process != NULL);

  for(current = list; current != NULL; current = current->next)

  {

  process(current);

  }

  }

  testNode.c

  #include <stdio.h>

  #include "node.h"

  #include "gtest/gtest.h"

  void printNode(Node *node)

  {

  static int i = 0;

  int data[] = {1,2,3};

  EXPECT_EQ(data[i], *(int*)node->ptr);

  i++;

  }

  TEST(NODE,makeListWithArray){

  int i;

  int data[] = {1,2,3};

  void *aSet[] = {&data[0], &data , &data };

  Node *list = makeListWithArray(aSet, 3);

  foreach(list, printNode);

  }

  程序入口实现(main.c)

  #include <stdio.h>

  #include <string.h>

  #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

      

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 多重继承详细教程 下一篇C++快排函数用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)