• R/O
  • HTTP
  • SSH
  • HTTPS

libcore: コミット

GikoMonaのソフトウェアの基幹部分を集めて1つのライブラリに集約したものです。gikomona/pnutsのコンパイルにはこのライブラリが必須です。


コミットメタ情報

リビジョン8c4d9ba83ff07b06722d013dd499dbbe465835f1 (tree)
日時2014-08-10 01:35:37
作者caprice <caprice@user...>
コミッターcaprice

ログメッセージ

* do_operationを追加
* mutex-nameをプロジェクト全体で統一的なものに
communication/*は肥大化しすぎており、今後libcoreから切り離す可能性が極めて高い

変更サマリ

差分

--- a/include/communication/post-office.hpp
+++ b/include/communication/post-office.hpp
@@ -2,6 +2,9 @@
22 #ifndef GIKOMONA_CORE_COMMUNICATION_POST_OFFICE_HPP
33 #define GIKOMONA_CORE_COMMUNICATION_POST_OFFICE_HPP
44
5+#include <unordered_map>
6+#include <algorithm>
7+
58 #include <boost/optional.hpp>
69 #include <boost/interprocess/managed_shared_memory.hpp>
710 #include <boost/interprocess/containers/vector.hpp>
@@ -19,6 +22,8 @@ namespace monazilla { namespace GikoMona { namespace core { namespace communicat
1922 * @warning 1つのプロセス中で複数回constructされた場合アプリケーション自体がabortする。
2023 */
2124 class post_office {
25+ typedef std::unordered_map<post_code, mailbox&> address_map;
26+
2227 public:
2328 explicit post_office(const post_code& self_);
2429 ~post_office() noexcept;
@@ -30,8 +35,30 @@ public:
3035 template <class MessageType>
3136 bool send(const post_code& to, MessageType&& msg);
3237
38+ bool register_mailbox(mailbox& obj);
39+ bool unregister_mailbox(const mailbox& obj);
40+ bool is_registered(const mailbox& obj);
41+
42+ void collect_mail_from_mailbox();
43+ void forward_mail_to_another_postoffice();
44+ void deliver_mail_to_mailbox();
45+
3346 mona_string receive(const post_code& originator_id);
3447
48+ void do_operation() {
49+ collect_mail_from_mailbox();
50+ forward_mail_to_another_postoffice();
51+ deliver_mail_to_mailbox();
52+
53+ std::for_each(mail_address.begin(),
54+ mail_address.end(),
55+ [] (const address_map::value_type& val) {
56+ if(val.second) {
57+
58+ }
59+ });
60+ }
61+
3562 static post_office* get_instance() {
3663 if(!instance) { /* error? */ }
3764 return instance;
@@ -39,11 +66,14 @@ public:
3966
4067 private:
4168 bool send_string(const post_code& to, mona_string&& src);
69+
4270 shared_memory gm_shmem; // アプリケーション群全体で共有されているメモリ
4371 const post_code self_code;
72+ address_map mail_address;
73+ mailbox tempolary_mailbox;
4474
45- const char *shared_memory_name = "monazilla.GikoMona.shared-memory";
46- const char *ref_counter_name = "monazilla.GikoMona.reference-counter";
75+ const char *shared_memory_name = "org.monazilla.GikoMona.shared-memory";
76+ const char *ref_counter_name = "org.monazilla.GikoMona.reference-counter";
4777
4878 static post_office* instance = nullptr;
4979 };
旧リポジトリブラウザで表示