• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "UrlDataManager.h"
9 
operator ==(const SkData & a,const SkData & b)10 bool operator==(const SkData& a, const SkData& b) {
11     return a.equals(&b);
12 }
13 
UrlDataManager(SkString rootUrl)14 UrlDataManager::UrlDataManager(SkString rootUrl) : fRootUrl(rootUrl), fDataId(0) {}
15 
addData(SkData * data,const char * contentType)16 SkString UrlDataManager::addData(SkData* data, const char* contentType) {
17     UrlData* urlData = fCache.find(*data);
18     if (fCache.find(*data)) {
19         SkASSERT(data->equals(urlData->fData.get()));
20         return urlData->fUrl;
21     }
22 
23     urlData = new UrlData;
24     urlData->fData.reset(SkRef(data));
25     urlData->fContentType.set(contentType);
26     urlData->fUrl.appendf("%s/%d", fRootUrl.c_str(), fDataId++);
27 
28     fCache.add(urlData);
29 
30     SkASSERT(!fUrlLookup.find(urlData->fUrl));
31     fUrlLookup.add(urlData);
32     return urlData->fUrl;
33 }
34 
reset()35 void UrlDataManager::reset() {
36     SkTDynamicHash<UrlData, SkData, LookupTrait>::Iter iter(&fCache);
37     while (!iter.done()) {
38         UrlData* urlData = &(*iter);
39         urlData->unref();
40         ++iter;
41     }
42 
43     fCache.rewind();
44 }
45