From 00cde6ae0bd11812d28327476100a42ef5b6686e Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Mon, 9 Jul 2018 19:53:36 +0900 Subject: [PATCH] [pp] Add 'EnclosedDocument' class (#570) 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 --- contrib/pp/include/pp/EnclosedDocument.h | 36 ++++++++++++++++++++++++++++++++ contrib/pp/src/EnclosedDocument.cpp | 18 ++++++++++++++++ contrib/pp/src/EnclosedDocument.test.cpp | 31 +++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 contrib/pp/include/pp/EnclosedDocument.h create mode 100644 contrib/pp/src/EnclosedDocument.cpp create mode 100644 contrib/pp/src/EnclosedDocument.test.cpp diff --git a/contrib/pp/include/pp/EnclosedDocument.h b/contrib/pp/include/pp/EnclosedDocument.h new file mode 100644 index 0000000..b1824f7 --- /dev/null +++ b/contrib/pp/include/pp/EnclosedDocument.h @@ -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 index 0000000..d5ed498 --- /dev/null +++ b/contrib/pp/src/EnclosedDocument.cpp @@ -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 index 0000000..827a0b7 --- /dev/null +++ b/contrib/pp/src/EnclosedDocument.test.cpp @@ -0,0 +1,31 @@ +#include "pp/EnclosedDocument.h" + +#include + +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"); +} -- 2.7.4