00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00028 #include <coconut_config.h>
00029 #include <inference_engine.h>
00030 #include <print_seq.h>
00031
00032 namespace coco {
00033
00034 void inference_engine::__prep_delta_list()
00035 {
00036 if(!_new_deltas.empty())
00037 _new_deltas.erase(_new_deltas.begin(), _new_deltas.end());
00038 _new_deltas.reserve((*__wnode)->deltas.size());
00039 #ifdef __GNUG__
00040 std::copy((*__wnode)->deltas.begin(), (*__wnode)->deltas.end(),
00041 _new_deltas.end());
00042 #else
00043 std::list<delta_id>::const_iterator od, ed((*__wnode)->deltas.end());
00044 for(od = (*__wnode)->deltas.begin(); od != ed; ++od)
00045 _new_deltas.push_back(*od);
00046 #endif
00047 if(!_new_deltas.empty())
00048 std::sort(_new_deltas.begin(), _new_deltas.end());
00049 }
00050
00051 std::pair<std::list<delta_id>,std::list<delta_id> > inference_engine::new_deltas()
00052 {
00053 std::list<delta_id> _app, _unapp;
00054 std::vector<delta_id>::const_iterator _o, _n, _eo, _en;
00055
00056 _eo = _old_deltas.end();
00057 _en = _new_deltas.end();
00058
00059 _o = _old_deltas.begin();
00060 _n = _new_deltas.begin();
00061
00062 while(_o != _eo && _n != _en)
00063 {
00064 if(_o == _eo)
00065 {
00066 _app.push_back(*_n);
00067 ++_n;
00068 }
00069 else if(_n == _en)
00070 {
00071 _unapp.push_back(*_o);
00072 ++_o;
00073 }
00074 else if(*_o < *_n)
00075 {
00076 _unapp.push_back(*_o);
00077 ++_o;
00078 }
00079 else if(*_o > *_n)
00080 {
00081 _app.push_back(*_n);
00082 ++_n;
00083 }
00084 else
00085 {
00086 ++_o;
00087 ++_n;
00088 }
00089 }
00090
00091 return std::make_pair(_app,_unapp);
00092 }
00093
00094 }