Support static flatbuffers in ErrorCounter

Change-Id: Id66ec368bcf14d485f16335f7c133ba388e2ebf8
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/aos/util/error_counter.h b/aos/util/error_counter.h
index 3e69a71..1e04571 100644
--- a/aos/util/error_counter.h
+++ b/aos/util/error_counter.h
@@ -41,6 +41,16 @@
     return offset;
   }
 
+  template <typename Static>
+  static void InitializeStaticFbs(Static *builder) {
+    CHECK(builder->reserve(kNumErrors));
+    for (size_t ii = 0; ii < kNumErrors; ++ii) {
+      auto element = CHECK_NOTNULL(builder->emplace_back());
+      element->set_error(static_cast<Error>(ii));
+      element->set_count(0);
+    }
+  }
+
   void set_mutable_vector(
       flatbuffers::Vector<flatbuffers::Offset<Count>> *vector) {
     vector_ = vector;
@@ -91,6 +101,14 @@
     return offset;
   }
 
+  template <typename Static>
+  void PopulateCountsStaticFbs(Static *builder) const {
+    ErrorCounter<Error, Count>::InitializeStaticFbs(builder);
+    for (size_t ii = 0; ii < kNumErrors; ++ii) {
+      builder->at(ii).set_count(error_counts_.at(ii));
+    }
+  }
+
   void IncrementError(Error error) {
     DCHECK_LT(static_cast<size_t>(error), error_counts_.size());
     error_counts_.at(static_cast<size_t>(error))++;