UrlDataManager.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. #include "tools/UrlDataManager.h"
  8. bool operator==(const SkData& a, const SkData& b) {
  9. return a.equals(&b);
  10. }
  11. UrlDataManager::UrlDataManager(SkString rootUrl) : fRootUrl(rootUrl), fDataId(0) {}
  12. SkString UrlDataManager::addData(SkData* data, const char* contentType) {
  13. UrlData* urlData = fCache.find(*data);
  14. if (fCache.find(*data)) {
  15. SkASSERT(data->equals(urlData->fData.get()));
  16. return urlData->fUrl;
  17. }
  18. urlData = new UrlData;
  19. urlData->fData.reset(SkRef(data));
  20. urlData->fContentType.set(contentType);
  21. urlData->fUrl.appendf("%s/%d", fRootUrl.c_str(), fDataId++);
  22. fCache.add(urlData);
  23. SkASSERT(!fUrlLookup.find(urlData->fUrl));
  24. fUrlLookup.add(urlData);
  25. return urlData->fUrl;
  26. }
  27. void UrlDataManager::reset() {
  28. SkTDynamicHash<UrlData, SkData, LookupTrait>::Iter iter(&fCache);
  29. while (!iter.done()) {
  30. UrlData* urlData = &(*iter);
  31. urlData->unref();
  32. ++iter;
  33. }
  34. fCache.rewind();
  35. }