/Users/eddyxu/work/quiplib/ace/srcs/Callbacks.inl

Go to the documentation of this file.
00001 //-*- C++ -*-
00014 namespace qlib {
00015 
00016         namespace ace {
00017 
00018                 template<
00019                         typename Seq,
00020                         typename Result
00021                         >
00022                 int Callback_Manager<Seq, Result>::add(param_type seq_id, callback_pointer callback, int option) {
00023                         typename container_type::iterator it = callbacks_.find(seq_id);
00024                         if(it != callbacks_.end())
00025                                 if( option == ADD_REPLACE )
00026                                         delete it->second;
00027                                 else if( option == ADD_WARNING )
00028                                         return 1;
00029                                 else
00030                                         return -1;
00031 
00032                         callbacks_[seq_id] = callback;
00033 
00034                         return 0;
00035                 }
00036 
00037                 template<
00038                         typename Seq,
00039                         typename Result
00040                         >
00041                 int Callback_Manager<Seq, Result>::callback(param_type seq_id) {
00042                         callback_pointer cb = find(seq_id);
00043                         if(cb == NULL)
00044                                 return -1;
00045 
00046                         return dispose(seq_id, cb->exec());
00047                 }
00048                 
00049                 template<
00050                         typename Seq,
00051                         typename Result
00052                         >
00053                 int Callback_Manager<Seq, Result>::callback(param_type seq_id, typename callback_type::result_type * result ) {
00054                         callback_pointer cb = find(seq_id);
00055                         if(cb == NULL)
00056                                 return -1;
00057 
00058                         return dispose(seq_id, cb->exec(result));       
00059                 }
00060                 
00061                 
00062                 template<
00063                         typename Seq,
00064                         typename Result
00065                         >
00066                 int Callback_Manager<Seq, Result>::dispose(param_type seq_id, int ret_value){
00067                         callback_pointer cb = find(seq_id);
00068                         if(!cb)
00069                                 return -1;
00070                         
00071                         if( ret_value > 0 )
00072                                 delete cb;
00073                         if( ret_value >= 0 )
00074                                 return callbacks_.erase(seq_id);
00075 
00076                         return 0;       
00077                 }
00078 
00079                 template<
00080                         typename Seq,
00081                         typename Result
00082                         >
00083                 int Callback_Manager<Seq, Result>::cancel(param_type seq_id) {
00084                         callback_pointer cb = find(seq_id);
00085                         if(cb == 0)
00086                                 return -1;
00087 
00088                         int ret = cb->cancel();
00089                         if( ret > 0 )
00090                                 delete cb;
00091                         if( ret >= 0 )
00092                                 callbacks_.erase(seq_id);
00093 
00094                         return 0;
00095                 }
00096 
00097 
00098 
00099         }//
00100 
00101 } // qlib

Generated on Fri Jun 8 22:49:19 2007 for qlib::ace by  doxygen 1.5.1