aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/UrlDataManager.cpp
blob: a30d8ba23e6e92c446f6d1944b5eabf793a7f483 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
 * 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();
}