diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-27 00:09:42 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-27 00:09:42 +0000 |
commit | ae2c20f398933a9e86c387dcc465ec0f71065ffc (patch) | |
tree | de668b1411e2ee0b4e49b6d8f8b68183134ac990 /skia/animator/SkGetCondensedInfo.cpp | |
parent | 09911bf300f1a419907a9412154760efd0b7abc3 (diff) | |
download | chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.zip chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.tar.gz chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.tar.bz2 |
Add skia to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/animator/SkGetCondensedInfo.cpp')
-rw-r--r-- | skia/animator/SkGetCondensedInfo.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/skia/animator/SkGetCondensedInfo.cpp b/skia/animator/SkGetCondensedInfo.cpp new file mode 100644 index 0000000..35f7171 --- /dev/null +++ b/skia/animator/SkGetCondensedInfo.cpp @@ -0,0 +1,130 @@ +/* libs/graphics/animator/SkGetCondensedInfo.cpp +** +** Copyright 2006, Google Inc. +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#include "SkMemberInfo.h" + +#if SK_USE_CONDENSED_INFO == 1 + +// SkCondensed.cpp is auto-generated +// To generate it, execute SkDisplayType::BuildCondensedInfo() +#ifdef SK_DEBUG +#include "SkCondensedDebug.cpp" +#else +#include "SkCondensedRelease.cpp" +#endif + +static int _searchByName(const unsigned char* lengths, int count, const char* strings, const char target[]) { + int lo = 0; + int hi = count - 1; + while (lo < hi) { + int mid = (hi + lo) >> 1; + if (strcmp(&strings[lengths[mid << 2]], target) < 0) + lo = mid + 1; + else + hi = mid; + } + if (strcmp(&strings[lengths[hi << 2]], target) != 0) + return -1; + return hi; +} + +static int _searchByType(SkDisplayTypes type) { + unsigned char match = (unsigned char) type; + int lo = 0; + int hi = kTypeIDs - 1; + while (lo < hi) { + int mid = (hi + lo) >> 1; + if (gTypeIDs[mid] < match) + lo = mid + 1; + else + hi = mid; + } + if (gTypeIDs[hi] != type) + return -1; + return hi; +} + +const SkMemberInfo* SkDisplayType::GetMembers(SkAnimateMaker* , SkDisplayTypes type, int* infoCountPtr) { + int lookup = _searchByType(type); + if (lookup < 0) + return NULL; + if (infoCountPtr) + *infoCountPtr = gInfoCounts[lookup]; + return gInfoTables[lookup]; +} + +// !!! replace with inline +const SkMemberInfo* SkDisplayType::GetMember(SkAnimateMaker* , SkDisplayTypes type, const char** matchPtr ) { + const SkMemberInfo* info = SkMemberInfo::Find(type, matchPtr); + SkASSERT(info); + return info; +} + +static const SkMemberInfo* _lookup(int lookup, const char** matchPtr) { + int count = gInfoCounts[lookup]; + const SkMemberInfo* info = gInfoTables[lookup]; + if (info->fType == SkType_BaseClassInfo) { + int baseTypeLookup = info->fOffset; + const SkMemberInfo* result = _lookup(baseTypeLookup, matchPtr); + if (result != NULL) + return result; + if (--count == 0) + return NULL; + info++; + } + SkASSERT(info->fType != SkType_BaseClassInfo); + const char* match = *matchPtr; + const char* strings = gInfoNames[lookup]; + int index = _searchByName(&info->fName, count, strings, match); + if (index < 0) + return NULL; + return &info[index]; +} + +const SkMemberInfo* SkMemberInfo::Find(SkDisplayTypes type, int* index) { + int count = gInfoCounts[lookup]; + const SkMemberInfo* info = gInfoTables[lookup]; + if (info->fType == SkType_BaseClassInfo) { + int baseTypeLookup = info->fOffset; + const SkMemberInfo* result = Find(baseTypeLookup, index); + if (result != NULL) + return result; + if (--count == 0) + return NULL; + info++; + } + SkASSERT(info->fType != SkType_BaseClassInfo); + if (*index >= count) { + *index -= count; + return NULL; + } + return &info[index]; +} + +const SkMemberInfo* SkMemberInfo::Find(SkDisplayTypes type, const char** matchPtr) { + int lookup = _searchByType(type); + SkASSERT(lookup >= 0); + return _lookup(lookup, matchPtr); +} + +const SkMemberInfo* SkMemberInfo::getInherited() const { + int baseTypeLookup = fOffset; + return gInfoTables[baseTypeLookup]; +} + +#endif + |