blob: 13e37982df1471e589d6f15735839ca65be787d4 [file] [log] [blame]
// Copyright 2017 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "xfa/fde/css/cfde_csstagcache.h"
#include <algorithm>
#include "core/fxcrt/fx_ext.h"
#include "xfa/fxfa/app/cxfa_csstagprovider.h"
CFDE_CSSTagCache::CFDE_CSSTagCache(CFDE_CSSTagCache* parent,
CXFA_CSSTagProvider* tag)
: pTag(tag), pParent(parent), dwIDHash(0), dwTagHash(0), iClassIndex(0) {
static const uint32_t s_dwIDHash = FX_HashCode_GetW(L"id", true);
static const uint32_t s_dwClassHash = FX_HashCode_GetW(L"class", true);
dwTagHash = FX_HashCode_GetW(pTag->GetTagName().AsStringC(), true);
for (auto it : *pTag) {
CFX_WideString wsValue = it.first;
CFX_WideString wsName = it.second;
uint32_t dwNameHash = FX_HashCode_GetW(wsName.AsStringC(), true);
if (dwNameHash == s_dwClassHash) {
uint32_t dwHash = FX_HashCode_GetW(wsValue.AsStringC(), false);
dwClassHashes.push_back(dwHash);
} else if (dwNameHash == s_dwIDHash) {
dwIDHash = FX_HashCode_GetW(wsValue.AsStringC(), false);
}
}
}
CFDE_CSSTagCache::CFDE_CSSTagCache(const CFDE_CSSTagCache& it)
: pTag(it.pTag),
pParent(it.pParent),
dwIDHash(it.dwIDHash),
dwTagHash(it.dwTagHash),
iClassIndex(0) {
std::copy(it.dwClassHashes.begin(), it.dwClassHashes.end(),
dwClassHashes.begin());
}
CFDE_CSSTagCache::~CFDE_CSSTagCache() {}