Convert aos over to flatbuffers
Everything builds, and all the tests pass. I suspect that some entries
are missing from the config files, but those will be found pretty
quickly on startup.
There is no logging or live introspection of queue messages.
Change-Id: I496ee01ed68f202c7851bed7e8786cee30df29f5
diff --git a/aos/events/simulated_event_loop.h b/aos/events/simulated_event_loop.h
new file mode 100644
index 0000000..485ab68
--- /dev/null
+++ b/aos/events/simulated_event_loop.h
@@ -0,0 +1,86 @@
+#ifndef AOS_EVENTS_SIMULATED_EVENT_LOOP_H_
+#define AOS_EVENTS_SIMULATED_EVENT_LOOP_H_
+
+#include <algorithm>
+#include <map>
+#include <memory>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include "absl/container/btree_map.h"
+#include "aos/events/event_loop.h"
+#include "aos/events/event_scheduler.h"
+#include "aos/flatbuffer_merge.h"
+#include "aos/flatbuffers.h"
+#include "aos/ipc_lib/index.h"
+#include "glog/logging.h"
+
+namespace aos {
+
+// Class for simulated fetchers.
+class SimulatedChannel;
+
+struct SimpleChannel {
+ SimpleChannel(const Channel *channel);
+ std::string name;
+ std::string type;
+
+ std::string DebugString() const {
+ return std::string("{ ") + name + ", " + type + "}";
+ }
+
+ bool operator==(const SimpleChannel &other) const {
+ return name == other.name && type == other.type;
+ }
+ bool operator<(const SimpleChannel &other) const {
+ int name_compare = other.name.compare(name);
+ if (name_compare == 0) {
+ return other.type < type;
+ } else if (name_compare < 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+};
+
+class SimulatedEventLoopFactory {
+ public:
+ // Constructs a SimulatedEventLoopFactory with the provided configuration.
+ // This configuration must remain in scope for the lifetime of the factory and
+ // all sub-objects.
+ SimulatedEventLoopFactory(const Configuration *configuration);
+ ~SimulatedEventLoopFactory();
+
+ ::std::unique_ptr<EventLoop> MakeEventLoop();
+
+ // Starts executing the event loops unconditionally.
+ void Run();
+ // Executes the event loops for a duration.
+ void RunFor(monotonic_clock::duration duration);
+
+ // Stops executing all event loops. Meant to be called from within an event
+ // loop handler.
+ void Exit() { scheduler_.Exit(); }
+
+ monotonic_clock::time_point monotonic_now() const {
+ return scheduler_.monotonic_now();
+ }
+ realtime_clock::time_point realtime_now() const {
+ return scheduler_.realtime_now();
+ }
+
+ private:
+ const Configuration *configuration_;
+ EventScheduler scheduler_;
+ // Map from name, type to queue.
+ absl::btree_map<SimpleChannel, std::unique_ptr<SimulatedChannel>> channels_;
+ // List of event loops to manage running and not running for.
+ std::vector<std::pair<EventLoop *, std::function<void(bool)>>>
+ raw_event_loops_;
+};
+
+} // namespace aos
+
+#endif // AOS_EVENTS_SIMULATED_EVENT_LOOP_H_