Previously either the compression data was the one declared within
DictionaryCompressor, or the derived class would have to override
the compress() to use a derived compression data.
With this change, the instantiation can be overridden, and thus
any derived class can choose the compression data pointer type
they need to use.
Change-Id: I387936265a3de6785a6096c7a6bd21774202b1c7
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33378
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
*/
virtual void addToDictionary(const DictionaryEntry data) = 0;
+ /**
+ * Instantiate a compression data of the sub-class compressor.
+ *
+ * @return The new compression data entry.
+ */
+ virtual std::unique_ptr<DictionaryCompressor::CompData>
+ instantiateDictionaryCompData() const;
+
/**
* Apply compression.
*
std::fill(dictionary.begin(), dictionary.end(), toDictionaryEntry(0));
}
+template <typename T>
+std::unique_ptr<typename DictionaryCompressor<T>::CompData>
+DictionaryCompressor<T>::instantiateDictionaryCompData() const
+{
+ return std::unique_ptr<DictionaryCompressor<T>::CompData>(new CompData());
+}
+
template <typename T>
std::unique_ptr<typename DictionaryCompressor<T>::Pattern>
DictionaryCompressor<T>::compressValue(const T data)
DictionaryCompressor<T>::compress(const uint64_t* data)
{
std::unique_ptr<Base::CompressionData> comp_data =
- std::unique_ptr<CompData>(new CompData());
+ instantiateDictionaryCompData();
// Reset dictionary
resetDictionary();