[pp] Add 'EnclosedDocument' class (#570)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 9 Jul 2018 10:53:36 +0000 (19:53 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 9 Jul 2018 10:53:36 +0000 (19:53 +0900)
This commit adds 'EnclosedDocument' class which provides front() method which
allows users to append lines at the bottom of heading (in forward direction),
and back() method which allows users to prepend lines at the top of
footer (in reverse direction).

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/pp/include/pp/EnclosedDocument.h [new file with mode: 0644]
contrib/pp/src/EnclosedDocument.cpp [new file with mode: 0644]
contrib/pp/src/EnclosedDocument.test.cpp [new file with mode: 0644]

diff --git a/contrib/pp/include/pp/EnclosedDocument.h b/contrib/pp/include/pp/EnclosedDocument.h
new file mode 100644 (file)
index 0000000..b1824f7
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef __PP_ENCLOSED_DOCUMENT_H__
+#define __PP_ENCLOSED_DOCUMENT_H__
+
+#include "pp/LinearDocument.h"
+
+namespace pp
+{
+
+class EnclosedDocument
+{
+public:
+  EnclosedDocument() : _front{}, _back{LinearDocument::Direction::Reverse}
+  {
+    // DO NOTHING
+  }
+
+public:
+  LinearDocument &front(void) { return _front; }
+  const LinearDocument &front(void) const { return _front; }
+
+public:
+  LinearDocument &back(void) { return _back; }
+  const LinearDocument &back(void) const { return _back; }
+
+public:
+  uint32_t lines(void) const;
+  const std::string &line(uint32_t n) const;
+
+private:
+  LinearDocument _front;
+  LinearDocument _back;
+};
+
+} // namespace pp
+
+#endif // __PP_ENCLOSED_DOCUMENT_H__
diff --git a/contrib/pp/src/EnclosedDocument.cpp b/contrib/pp/src/EnclosedDocument.cpp
new file mode 100644 (file)
index 0000000..d5ed498
--- /dev/null
@@ -0,0 +1,18 @@
+#include "pp/EnclosedDocument.h"
+
+namespace pp
+{
+
+uint32_t EnclosedDocument::lines(void) const { return _front.lines() + _back.lines(); }
+
+const std::string &EnclosedDocument::line(uint32_t n) const
+{
+  if (n < _front.lines())
+  {
+    return _front.line(n);
+  }
+
+  return _back.line(n - _front.lines());
+}
+
+} // namespace pp
diff --git a/contrib/pp/src/EnclosedDocument.test.cpp b/contrib/pp/src/EnclosedDocument.test.cpp
new file mode 100644 (file)
index 0000000..827a0b7
--- /dev/null
@@ -0,0 +1,31 @@
+#include "pp/EnclosedDocument.h"
+
+#include <gtest/gtest.h>
+
+TEST(LINEAR_DOCUMENT, lines)
+{
+  pp::EnclosedDocument doc;
+
+  doc.front().append("A");
+  doc.back().append("C");
+  doc.back().append("B");
+
+  ASSERT_EQ(doc.lines(), 3);
+}
+
+TEST(LINEAR_DOCUMENT, line)
+{
+  pp::EnclosedDocument doc;
+
+  doc.front().append("A");
+  doc.front().indent();
+  doc.front().append("B");
+  doc.back().append("C");
+  doc.back().append("B");
+
+  ASSERT_EQ(doc.lines(), 4);
+  ASSERT_EQ(doc.line(0), "A");
+  ASSERT_EQ(doc.line(1), "  B");
+  ASSERT_EQ(doc.line(2), "B");
+  ASSERT_EQ(doc.line(3), "C");
+}