45 class Comparator {
public:
46 bool operator() (
const Request& rRequest1,
const Request& rRequest2)
49 if (rRequest1.meClass == rRequest2.meClass)
51 if (rRequest1.mnPriorityInClass == rRequest2.mnPriorityInClass)
53 return rRequest1.maKey < rRequest2.maKey;
55 return rRequest1.mnPriorityInClass > rRequest2.mnPriorityInClass;
57 return rRequest1.meClass < rRequest2.meClass;
67 explicit DataComparator (
const CacheKey aKey)
71 bool operator() (
const Request& rRequest)
const
73 return maKey == rRequest.maKey;
97 mpCacheContext(
std::move(pCacheContext)),
112 ::osl::MutexGuard aGuard (
maMutex);
118#if OSL_DEBUG_LEVEL >=2
127 Request aRequest (aKey, nPriority, eRequestClass);
129 std::pair<Container::iterator,bool> ret =
mpRequestQueue->insert(aRequest);
130 bool bInserted = ret.second;
138#if OSL_DEBUG_LEVEL >=2
139 SAL_INFO(
"sd.sls", __func__ <<
": " << (bRemoved?
"replaced":
"added")
140 <<
" request for page " << ((aKey->
GetPageNum()-1)/2)
141 <<
" with priority class " <<
static_cast<int>(eRequestClass));
151#if OSL_DEBUG_LEVEL >=2
159 ::osl::MutexGuard aGuard (
maMutex);
160#if OSL_DEBUG_LEVEL >=2
161 bool bIsRemoved =
false;
165 Container::const_iterator aRequestIterator = ::std::find_if (
168 Request::DataComparator(aKey));
179#if OSL_DEBUG_LEVEL >=2
186#if OSL_DEBUG_LEVEL >=2
196 ::osl::MutexGuard aGuard (
maMutex);
200 Container::const_iterator iRequest (
204 Request::DataComparator(aKey)));
205 if (iRequest!=
mpRequestQueue->end() && iRequest->meClass!=eNewRequestClass)
213 ::osl::MutexGuard aGuard (
maMutex);
216 throw css::uno::RuntimeException(
"RequestQueue::GetFront(): queue is empty",
224 ::osl::MutexGuard aGuard (
maMutex);
227 throw css::uno::RuntimeException(
"RequestQueue::GetFrontPriorityClass(): queue is empty",
235 ::osl::MutexGuard aGuard (
maMutex);
255 ::osl::MutexGuard aGuard (
maMutex);
261 ::osl::MutexGuard aGuard (
maMutex);
sal_Int32 mnPriorityInClass
RequestPriorityClass meClass
sal_uInt16 GetPageNum() const
void RemovePageUser(sdr::PageUser &rOldUser)
void AddPageUser(sdr::PageUser &rNewUser)
bool IsEmpty()
Returns <TRUE> when there is no element in the queue.
int mnMaximumPriority
An upper bound of the highest priority of all elements in the queues.
bool RemoveRequest(CacheKey aKey)
Remove the specified request from the queue.
std::unique_ptr< Container > mpRequestQueue
void AddRequest(CacheKey aKey, RequestPriorityClass eRequestClass)
Insert a request with highest or lowest priority in its priority class.
RequestQueue(SharedCacheContext pCacheContext)
RequestPriorityClass GetFrontPriorityClass()
SharedCacheContext mpCacheContext
void PopFront()
Really a synonym for RemoveRequest(GetFront());.
virtual void PageInDestruction(const SdrPage &rPage) override
Ensure we don't hand out a page deleted before anyone got a chance to process it.
void Clear()
Remove all requests from the queue.
void ChangeClass(CacheKey aKey, RequestPriorityClass eNewRequestClass)
Change the priority class of the specified request.
int mnMinimumPriority
A lower bound of the lowest priority of all elements in the queues.
CacheKey GetFront()
Get the request with the highest priority int the highest priority class.
#define SAL_INFO(area, stream)
RequestPriorityClass
Each request for a preview creation has a priority.
std::shared_ptr< CacheContext > SharedCacheContext