mem-cache: Allow inheriting from DitionaryCompressor's comp data
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>
This commit is contained in:
committed by
Daniel Carvalho
parent
8bb0e3749b
commit
3fc4c0a415
@@ -221,6 +221,14 @@ class DictionaryCompressor : public BaseDictionaryCompressor
|
||||
*/
|
||||
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.
|
||||
*
|
||||
|
||||
@@ -79,6 +79,13 @@ DictionaryCompressor<T>::resetDictionary()
|
||||
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)
|
||||
@@ -119,7 +126,7 @@ std::unique_ptr<Base::CompressionData>
|
||||
DictionaryCompressor<T>::compress(const uint64_t* data)
|
||||
{
|
||||
std::unique_ptr<Base::CompressionData> comp_data =
|
||||
std::unique_ptr<CompData>(new CompData());
|
||||
instantiateDictionaryCompData();
|
||||
|
||||
// Reset dictionary
|
||||
resetDictionary();
|
||||
|
||||
Reference in New Issue
Block a user