blob: a30d8ba23e6e92c446f6d1944b5eabf793a7f483 [file] [log] [blame]
joshualittcdad12f2016-02-08 07:08:21 -08001/*
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
10bool operator==(const SkData& a, const SkData& b) {
11 return a.equals(&b);
12}
13
14UrlDataManager::UrlDataManager(SkString rootUrl) : fRootUrl(rootUrl), fDataId(0) {}
15
16SkString 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
35void 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}