PersistentWorldStateSegment.h
Go to the documentation of this file.
1/*
2* This file is part of ArmarX.
3*
4* ArmarX is free software; you can redistribute it and/or modify
5* it under the terms of the GNU General Public License version 2 as
6* published by the Free Software Foundation.
7*
8* ArmarX is distributed in the hope that it will be useful, but
9* WITHOUT ANY WARRANTY; without even the implied warranty of
10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11* GNU General Public License for more details.
12*
13* You should have received a copy of the GNU General Public License
14* along with this program. If not, see <http://www.gnu.org/licenses/>.
15*
16* @package MemoryX::MemoryTypes
17* @author Thomas von der Heyde (tvh242 at hotmail dot com)
18* @date 2014
19* @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20* GNU General Public License
21*/
22
23#pragma once
24
26
28#include <MemoryX/interface/core/EntityBase.h>
29#include <MemoryX/interface/memorytypes/MemoryEntities.h>
30#include <MemoryX/interface/memorytypes/MemorySegments.h>
31
32namespace memoryx
33{
35 virtual public PersistentEntitySegment,
36 virtual public PersistentWorldStateSegmentBase
37 {
38 public:
39 PersistentWorldStateSegment(CollectionInterfacePrx entityCollection,
41 bool useMongoIds = true) :
42 PersistentEntitySegment(entityCollection, ic, useMongoIds),
43 PersistentWorldStateSegmentBase()
44 {
45 }
46
47 ObjectInstanceBasePtr
48 getWorldInstanceById(const ::std::string& id,
49 const ::Ice::Current& = Ice::emptyCurrent) const
50 {
51 ObjectInstanceBasePtr res = ObjectInstanceBasePtr::dynamicCast(getEntityById(id));
52
53 if (!res)
54 {
55 ARMARX_WARNING_S << "Entity with id " << id << " is not of type ObjectInstance!"
56 << std::endl;
57 }
58
59 return res;
60 }
61
62 ObjectInstanceBasePtr
63 getWorldInstanceByName(const ::std::string& name,
64 const ::Ice::Current& = Ice::emptyCurrent) const
65 {
66 ObjectInstanceBasePtr res = ObjectInstanceBasePtr::dynamicCast(getEntityByName(name));
67
68 if (!res)
69 {
70 ARMARX_WARNING_S << "Entity with name " << name << " is not of type ObjectInstance!"
71 << std::endl;
72 }
73
74 return res;
75 }
76
77 ObjectInstanceList
78 getWorldInstancesByClass(const ::std::string& className,
79 const ::Ice::Current& c = Ice::emptyCurrent) const
80 {
81 NameList classList;
82 classList.push_back(className);
83 return getWorldInstancesByClassList(classList, c);
84 }
85
86 ObjectInstanceList
87 getWorldInstancesByClassList(const NameList& classList,
88 const ::Ice::Current& c = Ice::emptyCurrent) const
89 {
90 ObjectInstanceList result;
92
93
94 for (EntityMap::const_iterator it = entityMap.begin(); it != entityMap.end(); ++it)
95 {
96 ObjectInstanceBasePtr inst = ObjectInstanceBasePtr::dynamicCast(it->second);
97 ClassProbabilityMap instClasses = inst->getClasses();
98
99 for (NameList::const_iterator itCls = classList.begin(); itCls != classList.end();
100 ++itCls)
101 {
102 if (instClasses.count(*itCls))
103 {
104 result.push_back(inst);
105 break;
106 }
107 }
108 }
109
110 return result;
111 }
112 };
113
115
116} // namespace memoryx
#define ARMARXCOMPONENT_IMPORT_EXPORT
constexpr T c
PersistentEntitySegment(CollectionInterfacePrx entityCollection, Ice::CommunicatorPtr ic, bool useMongoIds=true)
EntityBasePtr getEntityById(const ::std::string &entityId, const ::Ice::Current &=Ice::emptyCurrent) const override
EntityBasePtr getEntityByName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) const override
ObjectInstanceList getWorldInstancesByClassList(const NameList &classList, const ::Ice::Current &c=Ice::emptyCurrent) const
PersistentWorldStateSegment(CollectionInterfacePrx entityCollection, Ice::CommunicatorPtr ic, bool useMongoIds=true)
ObjectInstanceBasePtr getWorldInstanceById(const ::std::string &id, const ::Ice::Current &=Ice::emptyCurrent) const
ObjectInstanceList getWorldInstancesByClass(const ::std::string &className, const ::Ice::Current &c=Ice::emptyCurrent) const
ObjectInstanceBasePtr getWorldInstanceByName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) const
ScopedSharedLockPtr getReadLock(const Ice::Current &c) const
#define ARMARX_WARNING_S
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:213
std::shared_ptr< ScopedSharedLock > ScopedSharedLockPtr
::IceInternal::Handle<::Ice::Communicator > CommunicatorPtr
Definition IceManager.h:49
VirtualRobot headers.
IceInternal::Handle< PersistentWorldStateSegment > PersistentWorldStateSegmentPtr