gfx/skia/trunk/src/animator/SkGetCondensedInfo.cpp

Thu, 15 Jan 2015 15:55:04 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:55:04 +0100
branch
TOR_BUG_9701
changeset 9
a63d609f5ebe
permissions
-rw-r--r--

Back out 97036ab72558 which inappropriately compared turds to third parties.

     2 /*
     3  * Copyright 2006 The Android Open Source Project
     4  *
     5  * Use of this source code is governed by a BSD-style license that can be
     6  * found in the LICENSE file.
     7  */
    10 #include "SkMemberInfo.h"
    12 #if SK_USE_CONDENSED_INFO == 1
    14 // SkCondensed.cpp is auto-generated
    15 // To generate it, execute SkDisplayType::BuildCondensedInfo()
    16 #ifdef SK_DEBUG
    17 #include "SkCondensedDebug.cpp"
    18 #else
    19 #include "SkCondensedRelease.cpp"
    20 #endif
    22 static int _searchByName(const unsigned char* lengths, int count, const char* strings, const char target[]) {
    23     int lo = 0;
    24     int hi = count - 1;
    25     while (lo < hi) {
    26         int mid = (hi + lo) >> 1;
    27         if (strcmp(&strings[lengths[mid << 2]], target) < 0)
    28             lo = mid + 1;
    29         else
    30             hi = mid;
    31     }
    32     if (strcmp(&strings[lengths[hi << 2]], target) != 0)
    33         return -1;
    34     return hi;
    35 }
    37 static int _searchByType(SkDisplayTypes type) {
    38     unsigned char match = (unsigned char) type;
    39     int lo = 0;
    40     int hi = kTypeIDs - 1;
    41     while (lo < hi) {
    42         int mid = (hi + lo) >> 1;
    43         if (gTypeIDs[mid] < match)
    44             lo = mid + 1;
    45         else
    46             hi = mid;
    47     }
    48     if (gTypeIDs[hi] != type)
    49         return -1;
    50     return hi;
    51 }
    53 const SkMemberInfo* SkDisplayType::GetMembers(SkAnimateMaker* , SkDisplayTypes type, int* infoCountPtr) {
    54     int lookup = _searchByType(type);
    55     if (lookup < 0)
    56         return NULL;
    57     if (infoCountPtr)
    58         *infoCountPtr = gInfoCounts[lookup];
    59     return gInfoTables[lookup];
    60 }
    62 // !!! replace with inline
    63 const SkMemberInfo* SkDisplayType::GetMember(SkAnimateMaker* , SkDisplayTypes type, const char** matchPtr ) {
    64     const SkMemberInfo* info = SkMemberInfo::Find(type, matchPtr);
    65     SkASSERT(info);
    66     return info;
    67 }
    69 static const SkMemberInfo* _lookup(int lookup, const char** matchPtr) {
    70     int count = gInfoCounts[lookup];
    71     const SkMemberInfo* info = gInfoTables[lookup];
    72     if (info->fType == SkType_BaseClassInfo) {
    73         int baseTypeLookup = info->fOffset;
    74         const SkMemberInfo* result = _lookup(baseTypeLookup, matchPtr);
    75         if (result != NULL)
    76             return result;
    77         if (--count == 0)
    78             return NULL;
    79         info++;
    80     }
    81     SkASSERT(info->fType != SkType_BaseClassInfo);
    82     const char* match = *matchPtr;
    83     const char* strings = gInfoNames[lookup];
    84     int index = _searchByName(&info->fName, count, strings, match);
    85     if (index < 0)
    86         return NULL;
    87     return &info[index];
    88 }
    90 const SkMemberInfo* SkMemberInfo::Find(SkDisplayTypes type, int* index) {
    91     int count = gInfoCounts[lookup];
    92     const SkMemberInfo* info = gInfoTables[lookup];
    93     if (info->fType == SkType_BaseClassInfo) {
    94         int baseTypeLookup = info->fOffset;
    95         const SkMemberInfo* result = Find(baseTypeLookup, index);
    96         if (result != NULL)
    97             return result;
    98         if (--count == 0)
    99             return NULL;
   100         info++;
   101     }
   102     SkASSERT(info->fType != SkType_BaseClassInfo);
   103     if (*index >= count) {
   104         *index -= count;
   105         return NULL;
   106     }
   107     return &info[index];
   108 }
   110 const SkMemberInfo* SkMemberInfo::Find(SkDisplayTypes type, const char** matchPtr) {
   111     int lookup = _searchByType(type);
   112     SkASSERT(lookup >= 0);
   113     return _lookup(lookup, matchPtr);
   114 }
   116 const SkMemberInfo* SkMemberInfo::getInherited() const {
   117     int baseTypeLookup = fOffset;
   118     return gInfoTables[baseTypeLookup];
   119 }
   121 #endif

mercurial