summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2019-09-05 12:58:53 -0500
committerMatt Spinler <spinler@us.ibm.com>2019-09-10 20:18:56 +0000
commitcf5a8d0f219691c4508bff85af59167ed9a5d681 (patch)
treeb46181bd30416f6f4b008523aa2345c2fa35e883
parent5fa87f08fa9ae9a41acf7b5f3159d9916d97e40e (diff)
downloadphosphor-logging-cf5a8d0f219691c4508bff85af59167ed9a5d681.tar.gz
phosphor-logging-cf5a8d0f219691c4508bff85af59167ed9a5d681.zip
PEL: Add a flatten() to Section base class
To prepare for supporting PEL sections that can be in any order, which will probably be stored in a std::vector<unique_ptr<Section>>, add a pure virtual function in the Section base class so this list of sections can just be iterated on and have every object in it flattened. This flatten() call replaces the operator<<(Stream&, <object>) functions currently in use, so also convert the operator>> to unflatten() to make things consistent. Signed-off-by: Matt Spinler <spinler@us.ibm.com> Change-Id: Id68f16fe4197b389a8495c21539a64f9f583c800
-rw-r--r--extensions/openpower-pels/pel.cpp4
-rw-r--r--extensions/openpower-pels/private_header.cpp20
-rw-r--r--extensions/openpower-pels/private_header.hpp33
-rw-r--r--extensions/openpower-pels/section.hpp7
-rw-r--r--extensions/openpower-pels/user_header.cpp21
-rw-r--r--extensions/openpower-pels/user_header.hpp33
-rw-r--r--test/openpower-pels/private_header_test.cpp4
-rw-r--r--test/openpower-pels/user_header_test.cpp4
8 files changed, 59 insertions, 67 deletions
diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index 3000864..1eac869 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -58,7 +58,7 @@ void PEL::flatten(std::vector<uint8_t>& pelBuffer)
Stream pelData{pelBuffer};
if (_ph->valid())
{
- pelData << *_ph;
+ _ph->flatten(pelData);
}
else
{
@@ -67,7 +67,7 @@ void PEL::flatten(std::vector<uint8_t>& pelBuffer)
if (_uh->valid())
{
- pelData << *_uh;
+ _uh->flatten(pelData);
}
}
diff --git a/extensions/openpower-pels/private_header.cpp b/extensions/openpower-pels/private_header.cpp
index 7611a75..d4c3dee 100644
--- a/extensions/openpower-pels/private_header.cpp
+++ b/extensions/openpower-pels/private_header.cpp
@@ -13,7 +13,7 @@ PrivateHeader::PrivateHeader(Stream& pel)
{
try
{
- pel >> *this;
+ unflatten(pel);
validate();
}
catch (const std::exception& e)
@@ -52,20 +52,18 @@ void PrivateHeader::validate()
_valid = (failed) ? false : true;
}
-Stream& operator>>(Stream& s, PrivateHeader& ph)
+void PrivateHeader::unflatten(Stream& stream)
{
- s >> ph._header >> ph._createTimestamp >> ph._commitTimestamp >>
- ph._creatorID >> ph._logType >> ph._reservedByte >> ph._sectionCount >>
- ph._obmcLogID >> ph._creatorVersion >> ph._plid >> ph._id;
- return s;
+ stream >> _header >> _createTimestamp >> _commitTimestamp >> _creatorID >>
+ _logType >> _reservedByte >> _sectionCount >> _obmcLogID >>
+ _creatorVersion >> _plid >> _id;
}
-Stream& operator<<(Stream& s, PrivateHeader& ph)
+void PrivateHeader::flatten(Stream& stream)
{
- s << ph._header << ph._createTimestamp << ph._commitTimestamp
- << ph._creatorID << ph._logType << ph._reservedByte << ph._sectionCount
- << ph._obmcLogID << ph._creatorVersion << ph._plid << ph._id;
- return s;
+ stream << _header << _createTimestamp << _commitTimestamp << _creatorID
+ << _logType << _reservedByte << _sectionCount << _obmcLogID
+ << _creatorVersion << _plid << _id;
}
Stream& operator>>(Stream& s, CreatorVersion& cv)
diff --git a/extensions/openpower-pels/private_header.hpp b/extensions/openpower-pels/private_header.hpp
index d9353ab..4a8b330 100644
--- a/extensions/openpower-pels/private_header.hpp
+++ b/extensions/openpower-pels/private_header.hpp
@@ -51,6 +51,13 @@ class PrivateHeader : public Section
explicit PrivateHeader(Stream& pel);
/**
+ * @brief Flatten the section into the stream
+ *
+ * @param[in] stream - The stream to write to
+ */
+ void flatten(Stream& stream) override;
+
+ /**
* @brief Returns the creation timestamp
*
* @return BCDTime& - the timestamp
@@ -157,11 +164,15 @@ class PrivateHeader : public Section
sizeof(_creatorVersion) + sizeof(_plid) + sizeof(_id);
}
- friend Stream& operator>>(Stream& s, PrivateHeader& ph);
- friend Stream& operator<<(Stream& s, PrivateHeader& ph);
-
private:
/**
+ * @brief Fills in the object from the stream data
+ *
+ * @param[in] stream - The stream to read from
+ */
+ void unflatten(Stream& stream);
+
+ /**
* @brief Validates the section contents
*
* Updates _valid (in Section) with the results.
@@ -221,22 +232,6 @@ class PrivateHeader : public Section
};
/**
- * @brief Stream extraction operator for the PrivateHeader
- *
- * @param[in] s - the stream
- * @param[out] ph - the PrivateHeader object
- */
-Stream& operator>>(Stream& s, PrivateHeader& ph);
-
-/**
- * @brief Stream insertion operator for the PrivateHeader
- *
- * @param[out] s - the stream
- * @param[in] ph - the PrivateHeader object
- */
-Stream& operator<<(Stream& s, PrivateHeader& ph);
-
-/**
* @brief Stream extraction operator for the CreatorVersion
*
* @param[in] s - the stream
diff --git a/extensions/openpower-pels/section.hpp b/extensions/openpower-pels/section.hpp
index 7214e17..d0f88e1 100644
--- a/extensions/openpower-pels/section.hpp
+++ b/extensions/openpower-pels/section.hpp
@@ -39,6 +39,13 @@ class Section
return _valid;
}
+ /**
+ * @brief Flatten the section into the stream
+ *
+ * @param[in] stream - The stream to write to
+ */
+ virtual void flatten(Stream& stream) = 0;
+
protected:
/**
* @brief Returns the flattened size of the section header
diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index 16d6212..117ade1 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -9,28 +9,25 @@ namespace pels
using namespace phosphor::logging;
-Stream& operator>>(Stream& s, UserHeader& uh)
+void UserHeader::unflatten(Stream& stream)
{
- s >> uh._header >> uh._eventSubsystem >> uh._eventScope >>
- uh._eventSeverity >> uh._eventType >> uh._reserved4Byte1 >>
- uh._problemDomain >> uh._problemVector >> uh._actionFlags >>
- uh._reserved4Byte2;
- return s;
+ stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >>
+ _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >>
+ _actionFlags >> _reserved4Byte2;
}
-Stream& operator<<(Stream& s, UserHeader& uh)
+void UserHeader::flatten(Stream& stream)
{
- s << uh._header << uh._eventSubsystem << uh._eventScope << uh._eventSeverity
- << uh._eventType << uh._reserved4Byte1 << uh._problemDomain
- << uh._problemVector << uh._actionFlags << uh._reserved4Byte2;
- return s;
+ stream << _header << _eventSubsystem << _eventScope << _eventSeverity
+ << _eventType << _reserved4Byte1 << _problemDomain << _problemVector
+ << _actionFlags << _reserved4Byte2;
}
UserHeader::UserHeader(Stream& pel)
{
try
{
- pel >> *this;
+ unflatten(pel);
validate();
}
catch (const std::exception& e)
diff --git a/extensions/openpower-pels/user_header.hpp b/extensions/openpower-pels/user_header.hpp
index d2c6ffc..ae7a922 100644
--- a/extensions/openpower-pels/user_header.hpp
+++ b/extensions/openpower-pels/user_header.hpp
@@ -43,6 +43,13 @@ class UserHeader : public Section
explicit UserHeader(Stream& pel);
/**
+ * @brief Flatten the section into the stream
+ *
+ * @param[in] stream - The stream to write to
+ */
+ void flatten(Stream& stream) override;
+
+ /**
* @brief Returns the subsystem field.
*
* @return uint8_t& - the subsystem
@@ -126,11 +133,15 @@ class UserHeader : public Section
sizeof(_actionFlags) + sizeof(_reserved4Byte2);
}
- friend Stream& operator>>(Stream& s, UserHeader& ph);
- friend Stream& operator<<(Stream& s, UserHeader& ph);
-
private:
/**
+ * @brief Fills in the object from the stream data
+ *
+ * @param[in] stream - The stream to read from
+ */
+ void unflatten(Stream& stream);
+
+ /**
* @brief Validates the section contents
*
* Updates _valid (in Section) with the results.
@@ -183,21 +194,5 @@ class UserHeader : public Section
uint32_t _reserved4Byte2;
};
-/**
- * @brief Stream extraction operator for the UserHeader
- *
- * @param[in] s - the stream
- * @param[out] uh - the UserHeader object
- */
-Stream& operator>>(Stream& s, UserHeader& uh);
-
-/**
- * @brief Stream insertion operator for the UserHeader
- *
- * @param[out] s - the stream
- * @param[in] uh - the UserHeader object
- */
-Stream& operator<<(Stream& s, UserHeader& uh);
-
} // namespace pels
} // namespace openpower
diff --git a/test/openpower-pels/private_header_test.cpp b/test/openpower-pels/private_header_test.cpp
index 40a1ad2..de16ac6 100644
--- a/test/openpower-pels/private_header_test.cpp
+++ b/test/openpower-pels/private_header_test.cpp
@@ -60,7 +60,7 @@ TEST(PrivateHeaderTest, UnflattenFlattenTest)
std::vector<uint8_t> newData;
Stream newStream(newData);
- newStream << ph;
+ ph.flatten(newStream);
EXPECT_EQ(*data, newData);
// Change a field, then flatten and unflatten again
@@ -68,7 +68,7 @@ TEST(PrivateHeaderTest, UnflattenFlattenTest)
newStream.offset(0);
newData.clear();
- newStream << ph;
+ ph.flatten(newStream);
EXPECT_NE(*data, newData);
newStream.offset(0);
diff --git a/test/openpower-pels/user_header_test.cpp b/test/openpower-pels/user_header_test.cpp
index 52087b6..0f22132 100644
--- a/test/openpower-pels/user_header_test.cpp
+++ b/test/openpower-pels/user_header_test.cpp
@@ -38,7 +38,7 @@ TEST(UserHeaderTest, UnflattenFlattenTest)
std::vector<uint8_t> newData;
Stream newStream(newData);
- newStream << uh;
+ uh.flatten(newStream);
EXPECT_EQ(*data, newData);
// Change a field, then flatten and unflatten again
@@ -46,7 +46,7 @@ TEST(UserHeaderTest, UnflattenFlattenTest)
newStream.offset(0);
newData.clear();
- newStream << uh;
+ uh.flatten(newStream);
EXPECT_NE(*data, newData);
newStream.offset(0);
OpenPOWER on IntegriCloud