20 #include "common_priv.h"
32 : logger(ctx.get(),
Logger::WARNING, n),
35 d4rnode(new D4R::Node(k)),
57 Key_t readerkey = q->GetReaderKey();
60 q->SignalReaderTagChanged();
62 shared_ptr<QueueReader> reader;
63 reader = shared_ptr<QueueReader>(
new QueueReader(
this, q));
64 readermap.insert(std::make_pair(readerkey, reader));
70 Key_t writerkey = q->GetWriterKey();
73 q->SignalWriterTagChanged();
75 shared_ptr<QueueWriter> writer;
76 writer = shared_ptr<QueueWriter>(
new QueueWriter(
this, q));
77 writermap.insert(std::make_pair(writerkey, writer));
88 for (ReaderMap::iterator i = readers.begin(); i != readers.end(); ++i) {
89 i->second->GetQueue()->ShutdownReader();
91 for (WriterMap::iterator i = writers.begin(); i != writers.end(); ++i) {
92 i->second->GetQueue()->ShutdownWriter();
100 shared_ptr<QueueReader> reader;
102 ReaderMap::iterator entry =
readermap.find(ekey);
104 reader = entry->second;
112 shared_ptr<QueueWriter> writer;
114 WriterMap::iterator entry =
writermap.find(ekey);
116 writer = entry->second;
126 WriterMap::iterator witr =
writermap.begin();
127 while (witr !=
writermap.end()) { (witr++)->second->NotifyTerminate(); }
128 ReaderMap::iterator ritr =
readermap.begin();
129 while (ritr !=
readermap.end()) { (ritr++)->second->NotifyTerminate(); }
134 shared_ptr<QueueReader> reader;
136 ReaderMap::iterator entry =
readermap.find(ekey);
141 reader = shared_ptr<QueueReader>(entry->second);
149 shared_ptr<QueueWriter> writer;
151 WriterMap::iterator entry =
writermap.find(ekey);
156 writer = shared_ptr<QueueWriter>(entry->second);
168 logger.
Error(
"Logging (key: %llu), %u readers, %u writers",
174 ReaderMap::iterator r =
readermap.begin();
176 r->second->GetQueue()->LogState();
179 WriterMap::iterator w =
writermap.begin();
181 w->second->GetQueue()->LogState();
Logger object that is used for forwarding log messages.
shared_ptr< D4R::Node > d4rnode
void Wait(ReentrantLock &lock) const
Top Representations of generic queues for the CPN library.
void CreateWriter(shared_ptr< QueueBase > q)
for use by the CPN::Kernel to create a new writer endpoint.
shared_ptr< QueueReader > GetReader(Key_t ekey)
shared_ptr< QueueWriter > GetWriter(Key_t ekey)
virtual void LogState()
For debugging ONLY!
The Context abstract data type.
PseudoNode(const std::string &name_, Key_t k, shared_ptr< Context > ctx)
uint64_t QueueKey() const
void Error(const char *fmt,...)
virtual bool IsPurePseudo()
std::map< Key_t, shared_ptr< QueueWriter > > WriterMap
virtual void Shutdown()
Perform actions (like joining a thread) before destruction.
shared_ptr< QueueReader > GetIQueue(const std::string &portname)
This method is for use by the user to aquire a reader endpoint. This function blocks until the CPN::K...
shared_ptr< QueueWriter > GetOQueue(const std::string &portname)
This method is for use by the user to aquire a writer endpoint. This function blocks until the CPN::K...
Sync::ReentrantCondition cond
shared_ptr< Context > context
Definition of the reader portion of the CPN queue class.
void CreateReader(shared_ptr< QueueBase > q)
for use by the CPN::Kernel to create a new read endpoint.
The definition of reader end of the queue.
Definition for the Queue writer inteface.
void NotifyTerminate()
Called by the kernel when it is shutting down.
void ReleaseWriter(Key_t ekey)
uint64_t QueueSize() const
std::map< Key_t, shared_ptr< QueueReader > > ReaderMap
Definition of the writer portion of the CPN queue class.
void ReleaseReader(Key_t ekey)