You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
/* |
|
* Copyright 2016 Google Inc. |
|
* |
|
* Use of this source code is governed by a BSD-style license that can be |
|
* found in the LICENSE file. |
|
*/ |
|
|
|
#include "UrlDataManager.h" |
|
|
|
bool operator==(const SkData& a, const SkData& b) { |
|
return a.equals(&b); |
|
} |
|
|
|
UrlDataManager::UrlDataManager(SkString rootUrl) : fRootUrl(rootUrl), fDataId(0) {} |
|
|
|
SkString UrlDataManager::addData(SkData* data, const char* contentType) { |
|
UrlData* urlData = fCache.find(*data); |
|
if (fCache.find(*data)) { |
|
SkASSERT(data->equals(urlData->fData.get())); |
|
return urlData->fUrl; |
|
} |
|
|
|
urlData = new UrlData; |
|
urlData->fData.reset(SkRef(data)); |
|
urlData->fContentType.set(contentType); |
|
urlData->fUrl.appendf("%s/%d", fRootUrl.c_str(), fDataId++); |
|
|
|
fCache.add(urlData); |
|
|
|
SkASSERT(!fUrlLookup.find(urlData->fUrl)); |
|
fUrlLookup.add(urlData); |
|
return urlData->fUrl; |
|
} |
|
|
|
void UrlDataManager::reset() { |
|
SkTDynamicHash<UrlData, SkData, LookupTrait>::Iter iter(&fCache); |
|
while (!iter.done()) { |
|
UrlData* urlData = &(*iter); |
|
urlData->unref(); |
|
++iter; |
|
} |
|
|
|
fCache.rewind(); |
|
}
|
|
|