blob: 015984d6fee174c7a666ab18e91ac16140fad3e1 [file] [log] [blame]
Alexander Afanasyev45fba082012-03-12 18:05:24 -07001/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
2/*
Alexander Afanasyev8722d872014-07-02 13:00:29 -07003 * Copyright (c) 2012-2014 University of California, Los Angeles
Alexander Afanasyev45fba082012-03-12 18:05:24 -07004 *
Alexander Afanasyev8722d872014-07-02 13:00:29 -07005 * This file is part of ChronoSync, synchronization library for distributed realtime
6 * applications for NDN.
Alexander Afanasyev45fba082012-03-12 18:05:24 -07007 *
Alexander Afanasyev8722d872014-07-02 13:00:29 -07008 * ChronoSync is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation, either
10 * version 3 of the License, or (at your option) any later version.
Alexander Afanasyev45fba082012-03-12 18:05:24 -070011 *
Alexander Afanasyev8722d872014-07-02 13:00:29 -070012 * ChronoSync is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
Alexander Afanasyev45fba082012-03-12 18:05:24 -070015 *
Alexander Afanasyev8722d872014-07-02 13:00:29 -070016 * You should have received a copy of the GNU General Public License along with
17 * ChronoSync, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Zhenkai Zhu <http://irl.cs.ucla.edu/~zhenkai/>
20 * @author Chaoyi Bian <bcy@pku.edu.cn>
21 * @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
Alexander Afanasyev45fba082012-03-12 18:05:24 -070022 */
23
24#ifndef SYNC_LOGIC_EVENT_CONTAINER_H
25#define SYNC_LOGIC_EVENT_CONTAINER_H
26
Alexander Afanasyevca6f3292012-04-09 10:03:30 -070027#include "sync-event.h"
28
Alexander Afanasyev45fba082012-03-12 18:05:24 -070029#include <boost/function.hpp>
30#include <boost/date_time/posix_time/posix_time_types.hpp>
31
32#include <boost/multi_index_container.hpp>
33// #include <boost/multi_index/tag.hpp>
34#include <boost/multi_index/ordered_index.hpp>
35// #include <boost/multi_index/composite_key.hpp>
36// #include <boost/multi_index/hashed_index.hpp>
37// #include <boost/multi_index/random_access_index.hpp>
38#include <boost/multi_index/member.hpp>
39// #include <boost/multi_index/mem_fun.hpp>
40
41namespace mi = boost::multi_index;
42
43namespace Sync
44{
45
Alexander Afanasyev45fba082012-03-12 18:05:24 -070046struct LogicEvent
47{
Alexander Afanasyevbf2b4362012-03-12 23:55:09 -070048 LogicEvent (const boost::system_time &_time, Event _event, uint32_t _label)
Alexander Afanasyev45fba082012-03-12 18:05:24 -070049 : time (_time)
50 , event (_event)
Alexander Afanasyevbf2b4362012-03-12 23:55:09 -070051 , lbl (_label)
Alexander Afanasyev45fba082012-03-12 18:05:24 -070052 { }
Yingdi Yu7c64e5c2014-04-30 14:06:37 -070053
Alexander Afanasyev45fba082012-03-12 18:05:24 -070054 boost::system_time time;
55 Event event;
Alexander Afanasyevbf2b4362012-03-12 23:55:09 -070056 uint32_t lbl;
Alexander Afanasyev45fba082012-03-12 18:05:24 -070057};
58
Alexander Afanasyevbf2b4362012-03-12 23:55:09 -070059/// @cond include_hidden
60struct byLabel { } ;
61/// @endcond
62
Alexander Afanasyev45fba082012-03-12 18:05:24 -070063/**
64 * \ingroup sync
65 * @brief ???
66 */
67struct EventsContainer : public mi::multi_index_container<
68 LogicEvent,
69 mi::indexed_by<
70
71 mi::ordered_non_unique<
72 mi::member<LogicEvent, boost::system_time, &LogicEvent::time>
Alexander Afanasyevbf2b4362012-03-12 23:55:09 -070073 >,
74
75 mi::ordered_non_unique<
76 mi::tag<byLabel>,
77 mi::member<LogicEvent, uint32_t, &LogicEvent::lbl>
Alexander Afanasyev45fba082012-03-12 18:05:24 -070078 >
79 >
80 >
81{
82};
83
84} // Sync
85
86#endif // SYNC_LOGIC_EVENT_CONTAINER_H