// ********************************************************************** // // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #include #include #include using namespace IceUtilInternal; using namespace std; Slice::FileException::FileException(const char* file, int line, const string& r) : IceUtil::Exception(file, line), _reason(r) { } #ifndef ICE_CPP11_COMPILER Slice::FileException::~FileException() throw() { } #endif string Slice::FileException::ice_id() const { return "::Slice::FileException"; } void Slice::FileException::ice_print(ostream& out) const { IceUtil::Exception::ice_print(out); out << ": " << _reason; } #ifndef ICE_CPP11_MAPPING Slice::FileException* Slice::FileException::ice_clone() const { return new FileException(*this); } #endif void Slice::FileException::ice_throw() const { throw *this; } string Slice::FileException::reason() const { return _reason; } static Slice::FileTrackerPtr Instance; Slice::FileTracker::FileTracker() : _curr(_generated.end()) { } Slice::FileTracker::~FileTracker() { } // The file tracker is not supposed to be thread safe. Slice::FileTrackerPtr Slice::FileTracker::instance() { if(!Instance) { Instance = new FileTracker(); } return Instance; } void Slice::FileTracker::setSource(const string& source) { _source = source; pair >::iterator, bool> p = _generated.insert(make_pair(source, list())); assert(p.second); _curr = p.first; } void Slice::FileTracker::error() { assert(_curr != _generated.end()); _generated.erase(_curr); _curr = _generated.end(); } void Slice::FileTracker::addFile(const string& file) { _files.push_front(make_pair(file, false)); if(_curr != _generated.end()) { _curr->second.push_back(file); } } void Slice::FileTracker::addDirectory(const string& dir) { _files.push_front(make_pair(dir, true)); } void Slice::FileTracker::cleanup() { for(list >::const_iterator p = _files.begin(); p != _files.end(); ++p) { if(!p->second) { IceUtilInternal::unlink(p->first); } else { IceUtilInternal::rmdir(p->first); } } } void Slice::FileTracker::dumpxml() { consoleOut << "" << endl; consoleOut << ""; for(map >::const_iterator p = _generated.begin(); p != _generated.end(); ++p) { if(!p->second.empty()) { consoleOut << endl << " first << "\">"; for(list::const_iterator q = p->second.begin(); q != p->second.end(); ++q) { consoleOut << endl << " "; } consoleOut << endl << " "; } } consoleOut << endl << "" << endl; }