/******************************************************************************/ template bool Sync(TimeStamp &time, C TimeStamp &src_time, TYPE &data, C TYPE &src_data) { if(Sync(time, src_time)){data=src_data; return true;} return false; } template bool UndoByTime(TimeStamp &time, C TimeStamp &src_time, TYPE &data, C TYPE &src_data) { if(Undo(time, src_time)){data=src_data; return true;} return false; } template bool SyncByValue(TimeStamp &time, C TimeStamp &src_time, TYPE &data, C TYPE &src_data) { if(data!=src_data){data=src_data; time=src_time; return true;} return false; } template bool SyncByValueEqual(TimeStamp &time, C TimeStamp &src_time, TYPE &data, C TYPE &src_data) { if(!Equal(data, src_data)){data=src_data; time=src_time; return true;} return false; } template bool UndoByValue(TimeStamp &time, C TimeStamp &src_time, TYPE &data, C TYPE &src_data) { if(data!=src_data){data=src_data; MAX1(time, src_time); return true;} return false; } template bool Undo(TimeStamp &time, C TimeStamp &src_time, TYPE &data, C TYPE &src_data) // ByTimeAndValue, make this the default function because there can be a lot of changes in the same second on the local computer { return UndoByTime (time, src_time, data, src_data) // first check by time because it's faster || UndoByValue(time, src_time, data, src_data); } bool NegativeSB(flt x) {return FlagTest ((uint&)x, SIGN_BIT);} void CHSSB(flt &x) { FlagToggle((uint&)x, SIGN_BIT);} template bool Save(File &f, C Memc &m ) { f.putInt(m.elms()); FREPA(m)if(!m[i].save(f ))return false; return f.ok();} template bool Save(File &f, C Memc &m, C USER &user) { f.putInt(m.elms()); FREPA(m)if(!m[i].save(f, user))return false; return f.ok();} template bool Save(File &f, C Memx &m ) { f.putInt(m.elms()); FREPA(m)if(!m[i].save(f ))return false; return f.ok();} template bool Load(File &f, Memc &m ) {m.setNum(f.getInt()); FREPA(m)if(!m[i].load(f ))goto error; if(f.ok())return true; error: m.clear(); return false;} template bool Load(File &f, Memc &m, C USER &user) {m.setNum(f.getInt()); FREPA(m)if(!m[i].load(f, user))goto error; if(f.ok())return true; error: m.clear(); return false;} template bool Load(File &f, Memx &m ) {m.setNum(f.getInt()); FREPA(m)if(!m[i].load(f ))goto error; if(f.ok())return true; error: m.clear(); return false;} /******************************************************************************/