/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2010-2012, Tomasz Sowa * All rights reserved. * */ #include #include "sessiondata.h" namespace Ticket { SessionData::SessionData() { fun_rm = 0; } SessionData::~SessionData() { Clear(); } void SessionData::Clear() { RemoveFiles(create_space_map, false); RemoveFiles(edit_space_map, true); } void SessionData::RemoveFiles(SessionData::SpaceMap & space_map, bool only_stale_files) { SpaceMap::iterator i; if( fun_rm ) { for(i=space_map.begin() ; i!=space_map.end() ; ++i) { if( only_stale_files ) RemoveAllStaleFiles(i->second.new_space, i->second.old_space); else RemoveAllFiles(i->second.new_space); } space_map.clear(); } } void SessionData::RemoveAllFiles(PT::Space & new_space) { std::vector new_file_tab; BuildFileList(new_file_tab, new_space); for(size_t i=0 ; iRemoveItemById(new_file_tab[i]); } void SessionData::RemoveAllStaleFiles(PT::Space & new_space, PT::Space & old_space) { std::vector new_file_tab; std::vector old_file_tab; size_t n = 0; size_t o = 0; BuildFileList(new_file_tab, new_space); BuildFileList(old_file_tab, old_space); std::sort(new_file_tab.begin(), new_file_tab.end()); std::sort(old_file_tab.begin(), old_file_tab.end()); // removes only those items present on new_file_tab // but not existing on old_space_tab while( n < new_file_tab.size() && o < old_file_tab.size() ) { if( new_file_tab[n] < old_file_tab[o] ) { fun_rm->RemoveItemById(new_file_tab[n]); n += 1; } else if( new_file_tab[n] == old_file_tab[o] ) { n += 1; o += 1; } else { o += 1; } } while( n < new_file_tab.size() ) { fun_rm->RemoveItemById(new_file_tab[n]); n += 1; } } void SessionData::BuildFileList(std::vector & file_tab, PT::Space & space) { file_tab.clear(); for(size_t i=0 ; i & file_tab, PT::Space & space) { for(size_t i=0 ; i res = ticket_map.insert( std::make_pair(id, Ticket()) ); if( is_new ) *is_new = res.second; return res.first->second; } PT::Space & SessionData::GetOldSpace(long id, SpaceMap & space_map, bool * is_new) { std::pair res = space_map.insert( std::make_pair(id, SpacePair()) ); if( is_new ) *is_new = res.second; return res.first->second.old_space; } PT::Space & SessionData::GetNewSpace(long id, SpaceMap & space_map, bool * is_new) { std::pair res = space_map.insert( std::make_pair(id, SpacePair()) ); if( is_new ) *is_new = res.second; return res.first->second.new_space; } } // namespace