00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00027 #include <annotation_delta.h>
00028
00029 bool annotation_delta::apply(work_node& _x, undelta_base*& _u) const
00030 {
00031 std::vector<annotation> rmd;
00032 rmd.reserve(rm.size());
00033 std::vector<annotation>::const_iterator __x, __e(rm.end());
00034 std::vector<annotation>::iterator __y, __f;
00035 for(__x = rm.begin(); __x != __e; ++__x)
00036 {
00037 __f = _x._ann.end();
00038 for(__y = _x._ann.begin(); __y != __f; ++__y)
00039 {
00040 if(*__x == *__y)
00041 {
00042 _x._ann.erase(__y);
00043 rmd.push_back(*__x);
00044 break;
00045 }
00046 }
00047 }
00048 _x._ann.insert(_x._ann.end(), add.begin(), add.end());
00049 _u = (undelta_base *) new annotation_undelta(add, rmd);
00050 return true;
00051 }
00052
00053 bool annotation_undelta::unapply(work_node& _x) const
00054 {
00055 std::vector<annotation>::const_iterator __x, __e(added_ann.end());
00056 std::vector<annotation>::iterator __y, __f;
00057 for(__x = added_ann.begin(); __x != __e; ++__x)
00058 {
00059 __f = _x._ann.end();
00060 for(__y = _x._ann.begin(); __y != __f; ++__y)
00061 {
00062 if(*__x == *__y)
00063 {
00064 _x._ann.erase(__y);
00065 break;
00066 }
00067 }
00068 }
00069 _x._ann.insert(_x._ann.end(), removed_ann.begin(), removed_ann.end());
00070 return true;
00071 }
00072