自处理list

一个自处理的list 用途多多
  1
   1  // 子项
  2     2  class  autoItem
  3    3 {
  4    4  public :
  5    5      // 处理
  6     6      virtual   bool   proces() = 0;
  7    7      // 弹出
  8     8      virtual   bool   ok() = 0; 
  9    9      // 处理顺序
 10    10      virtual   int    Order(){ return  0;}
 11   11 };
 12   12  enum  sortType
 13   13 {
 14   14     ST_Input,
 15   15     ST_Custom
 16   16 };
 17   17  // 自处理list
 18    18  class  _autolist
 19   19 {
 20   20  public :
 21   21     _autolist( sortType _type );
 22   22     ~_autolist();
 23   23 
 24   24      // 继承函数
 25    25  public :
 26   26      // 加入处理序列
 27    27      virtual   bool   push(autoItem *p);
 28   28      // 执行处理序列
 29    29      virtual   bool   go();
 30   30      // 清理所有
 31    31      virtual   bool   clear(); 
 32   32 
 33   33      //
 34    34  protected :
 35   35     std::list<autoItem*> itemList;
 36   36     sortType _sortType;
 37   37 };
 38   38 
 39   39 
 40   40 _autolist::_autolist( sortType _type )
 41   41 {
 42   42     _sortType = _type;
 43   43 }
 44   44 
 45   45 _autolist::~_autolist()
 46   46 {
 47   47     clear();
 48   48 }
 49   49 
 50   50  bool  _autolist::push( autoItem *p )
 51   51 {
 52   53      if  (p == NULL)  return   false ;
 53   54      switch  (_sortType)
 54   55     {
 55   56      case  ST_Input:
 56   57         {
 57   58             itemList.insert(itemList.end(),p);
 58   59              return   true ;
 59   60         }
 60   61      case  ST_Custom:
 61   62         {
 62   63              if  (itemList.size() == 0)
 63   64             {
 64   65                 itemList.push_back(p);
 65   66                  return   true ;
 66   67             }
 67   68              static  std::list<autoItem*>::iterator it;
 68   69             it= itemList.begin();
 69   70              for  (; it != itemList.end();it++)
 70   71             {
 71   72                  if  ((*it)->Order() < p->Order()) continue ;
 72   73                 itemList.insert(it,p);
 73   74                  break ;
 74   75             }
 75   76              return   true ;
 76   77         }
 77   78      default :
 78   80          return   false ;
 79   82     }
 80   83      return   false ;
 81   84 }
 82   85 
 83   86  bool  _autolist::go()
 84   87 {
 85   88      static  std::list<autoItem*>::iterator it;
 86   89      int  nsize = itemList.size();
 87   90     it= itemList.begin();
 88   91      for  (; it != itemList.end();)
 89   92     {
 90   93         (*it)->proces();
 91   94          if  ( (*it)->ok())
 92   95             it = itemList.erase(it);
 93   96          else
 94   97             it++;
 95   98     }
 96   99      return   true ;
 97  100 }
 98  101 
 99  102  bool  _autolist::clear()
100  103 {
101  104     itemList.clear();
102  105      return   true ;
103  106 }
104  107 
105  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值