Choreonoid  1.8
ArchiveSession.h
Go to the documentation of this file.
1 #ifndef CNOID_UTIL_ARCHIVE_SESSION_H
2 #define CNOID_UTIL_ARCHIVE_SESSION_H
3 
4 #include "Referenced.h"
5 #include "Signal.h"
6 #include <string>
7 #include "exportdecl.h"
8 
9 namespace cnoid {
10 
11 class Uuid;
12 
13 class CNOID_EXPORT ArchiveSession
14 {
15 public:
17  virtual ~ArchiveSession();
18 
19  void initialize();
20 
21  bool addReference(const Uuid& uuid, Referenced* object, bool doUnreferenceImmediately = false);
22 
23  template<class ObjectType>
25  const Uuid& uuid,
26  std::function<bool(ObjectType* object, bool isImmediate)> onResolved,
27  std::function<bool()> onNotResolved = nullptr)
28  {
29  resolveReference_(
30  uuid,
31  [onResolved](Referenced* object, bool isImmediate){
32  if(auto derived = dynamic_cast<ObjectType*>(object)){
33  return onResolved(derived, isImmediate);
34  }
35  return false;
36  },
37  onNotResolved,
38  false);
39  }
40 
41  template<class ObjectType>
43  const Uuid& uuid,
44  std::function<bool(ObjectType* object)> onResolved,
45  std::function<bool()> onNotResolved = nullptr)
46  {
47  resolveReference_(
48  uuid,
49  [onResolved](Referenced* object, bool isImmediate){
50  if(auto derived = dynamic_cast<ObjectType*>(object)){
51  return onResolved(derived);
52  }
53  return false;
54  },
55  onNotResolved,
56  false);
57  }
58 
59  virtual void putWarning(const std::string& message);
60  virtual void putError(const std::string& message);
61 
62  void resolvePendingReferences();
63  bool finalize();
64  SignalProxy<void()> sigSessionFinalized();
65 
66 private:
67  void resolveReference_(
68  const Uuid& uuid,
69  std::function<bool(Referenced* object, bool isImmediate)> onResolved,
70  std::function<bool()> onNotResolved,
71  bool doResolveLater
72  );
73 
74  class Impl;
75  Impl* impl;
76 };
77 
78 }
79 
80 #endif
Referenced.h
cnoid::ArchiveSession::resolveReferenceLater
void resolveReferenceLater(const Uuid &uuid, std::function< bool(ObjectType *object)> onResolved, std::function< bool()> onNotResolved=nullptr)
Definition: ArchiveSession.h:42
cnoid::ArchiveSession::resolveReference
void resolveReference(const Uuid &uuid, std::function< bool(ObjectType *object, bool isImmediate)> onResolved, std::function< bool()> onNotResolved=nullptr)
Definition: ArchiveSession.h:24
cnoid::Uuid
Definition: Uuid.h:11
cnoid::ArchiveSession
Definition: ArchiveSession.h:13
cnoid
Definition: AbstractSceneLoader.h:11
Signal.h
cnoid::Referenced
Definition: Referenced.h:54
cnoid::SignalProxy
Definition: Signal.h:470