/*
This file is part of hugin.
hugin is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
hugin is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with hugin. If not, see .
*/
/**
* @file Manager.h
* @brief
* Created on: Aug 6, 2010
* @author Florian Achleitner
*/
#ifndef MANAGER_H_
#define MANAGER_H_
#ifdef __APPLE__
//for MacOX the macro "check" gets somewhere defined
//this will collide with some boost libs, to prevent conflicts
//we undef the macro
#undef check
#endif
#include
#include "MakefileItem.h"
#include "Manageable.h"
namespace makefile
{
/**
* Provides object management features for easy using of the lib.
* It can work as an owner Manageable instances,
* and is therefore responsible for their destruction afterwards.
* The major advantage over holding MakefileItem s in auto-variables is that
* they get out of scope easily.
* before Makefile::writeMakefile and cause problems.
* This class is independent from Makefile.
* The usage:
* - Create a Manager, and call Manager::own with all new Items.
* - Finally after calling Makefile::writeMakefile, destroy the Manager and it
* will clean up all created Items.
*
* @note This can only work with heap allocated objects (new!).
*/
class MAKEIMPEX Manager
{
// boost::ptr_vector is perfect here, and it handles deletion.
boost::ptr_vector mitems;
Manager(const Manager&); // cannot copy this object!
public:
Manager();
virtual ~Manager() {}
/**
* Takes over ownership of a Manageable allocated with new. On destruction
* of the Manager item is deleted too.
* @param item
* @return item
*/
template
I* own(I* item)
{
mitems.push_back(item);
return item;
}
/**
* A shortcut. Calls Manager::own and Makefile::add for objects we don't need to deal
* with any further.
* @param item
*/
template
MI* own_add(MI* item)
{
own(item);
item->add();
return item;
}
};
}
#endif /* MANAGER_H_ */