Add reserve to ResizableBuffer

Change-Id: I4aab1652ad342af543dba586cba2b9cf3f415ac6
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/aos/containers/resizeable_buffer.h b/aos/containers/resizeable_buffer.h
index 5eb955f..4a4038c 100644
--- a/aos/containers/resizeable_buffer.h
+++ b/aos/containers/resizeable_buffer.h
@@ -42,6 +42,12 @@
   size_t size() const { return size_; }
   size_t capacity() const { return capacity_; }
 
+  void reserve(size_t new_size) {
+    if (new_size > capacity_) {
+      Allocate(new_size);
+    }
+  }
+
   void resize(size_t new_size) {
     if (new_size > capacity_) {
       Allocate(new_size);
diff --git a/aos/containers/resizeable_buffer_test.cc b/aos/containers/resizeable_buffer_test.cc
index 1d27a39..2665ba8 100644
--- a/aos/containers/resizeable_buffer_test.cc
+++ b/aos/containers/resizeable_buffer_test.cc
@@ -92,4 +92,26 @@
               ::testing::ElementsAreArray(expected));
 }
 
+TEST(ResizeableBufferTest, Reserve) {
+  ResizeableBuffer buffer;
+  EXPECT_EQ(buffer.size(), 0u);
+  EXPECT_EQ(buffer.capacity(), 0u);
+
+  buffer.reserve(10u);
+  EXPECT_EQ(buffer.size(), 0u);
+  EXPECT_EQ(buffer.capacity(), 10u);
+
+  buffer.reserve(1u);
+  EXPECT_EQ(buffer.size(), 0u);
+  EXPECT_EQ(buffer.capacity(), 10u);
+
+  buffer.resize(20u);
+  EXPECT_EQ(buffer.size(), 20u);
+  EXPECT_EQ(buffer.capacity(), 20u);
+
+  buffer.reserve(30u);
+  EXPECT_EQ(buffer.size(), 20u);
+  EXPECT_EQ(buffer.capacity(), 30u);
+}
+
 }  // namespace aos::testing