2007-11-13 03:37:58 +01:00
|
|
|
/*
|
|
|
|
|
Placement - Key Abstraction: a way to place and locate a Media Object
|
2010-12-17 23:28:49 +01:00
|
|
|
|
2008-03-10 04:25:03 +01:00
|
|
|
Copyright (C) Lumiera.org
|
|
|
|
|
2008, Hermann Vosseler <Ichthyostega@web.de>
|
2010-12-17 23:28:49 +01:00
|
|
|
|
2007-11-13 03:37:58 +01:00
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
|
modify it under the terms of the GNU General Public License as
|
2010-12-17 23:28:49 +01:00
|
|
|
published by the Free Software Foundation; either version 2 of
|
|
|
|
|
the License, or (at your option) any later version.
|
|
|
|
|
|
2007-11-13 03:37:58 +01:00
|
|
|
This program 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.
|
2010-12-17 23:28:49 +01:00
|
|
|
|
2007-11-13 03:37:58 +01:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
2010-12-17 23:28:49 +01:00
|
|
|
|
2007-11-13 03:37:58 +01:00
|
|
|
* *****************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "proc/mobject/placement.hpp"
|
|
|
|
|
#include "proc/mobject/explicitplacement.hpp"
|
2008-05-19 08:46:19 +02:00
|
|
|
#include "proc/mobject/mobject.hpp"
|
|
|
|
|
|
|
|
|
|
#include <boost/format.hpp>
|
2009-05-31 05:02:03 +02:00
|
|
|
#include <typeinfo>
|
2009-05-29 07:10:54 +02:00
|
|
|
|
|
|
|
|
using boost::format;
|
2008-05-19 08:46:19 +02:00
|
|
|
using boost::str;
|
2007-11-13 03:37:58 +01:00
|
|
|
|
2009-05-29 07:10:54 +02:00
|
|
|
namespace mobject {
|
2007-11-13 03:37:58 +01:00
|
|
|
|
|
|
|
|
|
2008-05-19 08:46:19 +02:00
|
|
|
/** @note we know we need only this single specialisation,
|
|
|
|
|
* because we define the Placements of more specific
|
|
|
|
|
* MObject kinds to be subclasses of Placement<MObject>,
|
|
|
|
|
* so they will inherit this function.
|
2009-11-27 20:30:06 +01:00
|
|
|
* //////////////////////TICKET #439
|
2008-05-19 08:46:19 +02:00
|
|
|
*/
|
2009-05-29 07:10:54 +02:00
|
|
|
ExplicitPlacement
|
|
|
|
|
Placement<MObject>::resolve () const
|
|
|
|
|
{
|
|
|
|
|
return ExplicitPlacement (*this, chain.resolve());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2008-05-19 08:46:19 +02:00
|
|
|
|
|
|
|
|
Placement<MObject>::operator string () const
|
2009-05-29 07:10:54 +02:00
|
|
|
{
|
2009-09-05 19:11:17 +02:00
|
|
|
static format fmt("Placement<%s> %|50T.| use-cnt=%u ID(%x) adr=%p pointee=%p");
|
2009-05-29 07:10:54 +02:00
|
|
|
return str(fmt % typeid(*get()).name() % use_count()
|
|
|
|
|
% (size_t)getID()
|
|
|
|
|
% this
|
|
|
|
|
% get()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string
|
|
|
|
|
format_PlacementID (Placement<MObject> const& pla)
|
|
|
|
|
{
|
|
|
|
|
static format fmt ("pID(%x)");
|
|
|
|
|
|
|
|
|
|
size_t hashVal = pla.getID();
|
|
|
|
|
return str(fmt % hashVal);
|
|
|
|
|
}
|
2008-05-19 08:46:19 +02:00
|
|
|
|
|
|
|
|
|
2010-01-09 04:46:17 +01:00
|
|
|
bool
|
|
|
|
|
isSameDef (PlacementMO const& pl1, PlacementMO const& pl2)
|
|
|
|
|
{
|
|
|
|
|
return pl1.getID() == pl2.getID()
|
|
|
|
|
|| pl1.chain == pl2.chain
|
|
|
|
|
;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-05-19 08:46:19 +02:00
|
|
|
|
2007-11-13 03:37:58 +01:00
|
|
|
|
|
|
|
|
} // namespace mobject
|