1f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 2f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/* 3f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Copyright 2006 The Android Open Source Project 4f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 5f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 6f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * found in the LICENSE file. 7f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 8f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 9f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 10f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifndef SkMemberInfo_DEFINED 11f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SkMemberInfo_DEFINED 12f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 13f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#if defined SK_BUILD_CONDENSED 14f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger #define SK_USE_CONDENSED_INFO 0 15f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 16f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 17f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkDisplayType.h" 18f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkScript.h" 19f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkString.h" 20f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkIntArray.h" 21f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 22f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkAnimateMaker; 23f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkDisplayable; 24f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkScriptEngine; 25f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 26f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger// temporary hacks until name change is more complete 27f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SkFloat SkScalar 28f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SkInt SkS32 29f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 30f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerstruct SkMemberInfo { 31f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger //!!! alternative: 32f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger // if fCount == 0, record is member property 33f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger // then fType can be type, so caller doesn't have to check 34f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#if SK_USE_CONDENSED_INFO == 0 35f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const char* fName; // may be NULL for anonymous functions 36f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger size_t fOffset; // if negative, is index into member pointer table (for properties and functions) 37f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes fType; 38f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int fCount; // for properties, actual type (count is always assumed to be 1) 39f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#else 40f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger unsigned char fName; 41f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger signed char fOffset; 42f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger unsigned char fType; 43f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger signed char fCount; 44f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 45f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes arrayType() const { 46f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(fType == SkType_Array); 47f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return (SkDisplayTypes) fCount; // hack, but worth it? 48f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 49f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int functionIndex() const { 50f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(fType == SkType_MemberFunction); 51f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return (signed) fOffset > 0 ? -1 + (int) fOffset : -1 - (int) fOffset; 52f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 53f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger bool getArrayValue(const SkDisplayable* displayable, int index, SkOperand* value) const; 54f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int getCount() const { 55f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return fType == SkType_MemberProperty || fType == SkType_Array || 56f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger fType == SkType_MemberFunction ? 1 : fCount; 57f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 58f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const SkMemberInfo* getInherited() const; 59f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger size_t getSize(const SkDisplayable* ) const; 60f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void getString(const SkDisplayable* , SkString** string) const; 61f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes getType() const { 62f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return fType == SkType_MemberProperty || fType == SkType_Array || 63f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger fType == SkType_MemberFunction ? (SkDisplayTypes) fCount : (SkDisplayTypes) fType; 64f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 65f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void getValue(const SkDisplayable* , SkOperand values[], int count) const; 66f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger bool isEnum() const; 67f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const char* mapEnums(const char* match, int* value) const; 68f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void* memberData(const SkDisplayable* displayable) const { 69f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(fType != SkType_MemberProperty && fType != SkType_MemberFunction); 70f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return (void*) ((const char*) displayable + fOffset); 71f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 72f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int propertyIndex() const { 73f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(fType == SkType_MemberProperty); 74f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return (signed) fOffset > 0 ? -1 + (int) fOffset : -1 - (int) fOffset; 75f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 76f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes propertyType() const { 77f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(fType == SkType_MemberProperty || fType == SkType_Array); 78f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return (SkDisplayTypes) fCount; // hack, but worth it? 79f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 80f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void setMemberData(SkDisplayable* displayable, const void* child, size_t size) const { 81f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(fType != SkType_MemberProperty && fType != SkType_MemberFunction); 82f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger memcpy((char*) displayable + fOffset, child, size); 83f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 84f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void setString(SkDisplayable* , SkString* ) const; 85f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void setValue(SkDisplayable* , const SkOperand values[], int count) const; 86f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger bool setValue(SkAnimateMaker& , SkTDOperandArray* storage, 87f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int storageOffset, int maxStorage, SkDisplayable* , 88f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes outType, const char value[], size_t len) const; 89f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger bool setValue(SkAnimateMaker& , SkTDOperandArray* storage, 90f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int storageOffset, int maxStorage, SkDisplayable* , 91f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes outType, SkString& str) const; 92f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger// void setValue(SkDisplayable* , const char value[], const char name[]) const; 93f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger bool writeValue(SkDisplayable* displayable, SkTDOperandArray* arrayStorage, 94f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int storageOffset, int maxStorage, void* untypedStorage, SkDisplayTypes outType, 95f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkScriptValue& scriptValue) const; 96f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#if SK_USE_CONDENSED_INFO == 0 97f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo* Find(const SkMemberInfo [], int count, int* index); 98f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo* Find(const SkMemberInfo [], int count, const char** name); 99f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#else 100f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo* Find(SkDisplayTypes type, int* index); 101f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo* Find(SkDisplayTypes type, const char** name); 102f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 103f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static size_t GetSize(SkDisplayTypes type); // size of simple types only 104f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger// static bool SetValue(void* value, const char* name, SkDisplayTypes , int count); 105f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 106f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 107f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER(_member, _type) \ 108f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger { #_member, SK_OFFSETOF(BASE_CLASS, _member), SkType_##_type, \ 109f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger sizeof(((BASE_CLASS*) 1)->_member) / sizeof(SkScalar) } 110f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 111f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_ALIAS(_member, _alias, _type) \ 112f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger { #_member, SK_OFFSETOF(BASE_CLASS, _alias), SkType_##_type, \ 113f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger sizeof(((BASE_CLASS*) 1)->_alias) / sizeof(SkScalar) } 114f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 115f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_ARRAY(_member, _type) \ 116f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger { #_member, SK_OFFSETOF(BASE_CLASS, _member), SkType_Array, \ 117f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (int) SkType_##_type } 118f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 119f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_INHERITED \ 120f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger { (const char*) INHERITED::fInfo, 0, SkType_BaseClassInfo, INHERITED::fInfoCount } 121f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 122f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger// #define SK_MEMBER_KEY_TYPE(_member, _type) 123f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger// {#_member, (size_t) -1, SkType_##_type, 0} 124f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 125f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_FUNCTION(_member) \ 126f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger k_##_member##Function 127f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 128f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_PROPERTY(_member) \ 129f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger k_##_member##Property 130f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 131f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_DYNAMIC_FUNCTION(_member, _type) \ 132f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger {#_member, (size_t) (+1 + SK_FUNCTION(_member)), SkType_MemberFunction, \ 133f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (int) SkType_##_type } 134f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 135f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_DYNAMIC_PROPERTY(_member, _type) \ 136f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger {#_member, (size_t) (1 + SK_PROPERTY(_member)), SkType_MemberProperty, \ 137f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (int) SkType_##_type } 138f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 139f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_FUNCTION(_member, _type) \ 140f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger {#_member, (size_t) (-1 - SK_FUNCTION(_member)), SkType_MemberFunction, \ 141f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (int) SkType_##_type } 142f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 143f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SK_MEMBER_PROPERTY(_member, _type) \ 144f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger {#_member, (size_t) (-1 - SK_PROPERTY(_member)), SkType_MemberProperty, \ 145f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (int) SkType_##_type } 146f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 147f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#if SK_USE_CONDENSED_INFO == 0 148f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 149f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_PRIVATE_MEMBER_INFO(_type) \ 150f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 151f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo fInfo[]; \ 152f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const int fInfoCount; \ 153f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index); \ 154f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]); \ 155f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef Sk##_type BASE_CLASS 156f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 157f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_MEMBER_INFO(_type) \ 158f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 159f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo fInfo[]; \ 160f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const int fInfoCount; \ 161f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index); \ 162f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]); \ 163f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } \ 164f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef Sk##_type BASE_CLASS 165f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 166f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_DRAW_MEMBER_INFO(_type) \ 167f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 168f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo fInfo[]; \ 169f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const int fInfoCount; \ 170f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index); \ 171f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]); \ 172f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } \ 173f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef SkDraw##_type BASE_CLASS 174f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 175f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_DISPLAY_MEMBER_INFO(_type) \ 176f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 177f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo fInfo[]; \ 178f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const int fInfoCount; \ 179f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index); \ 180f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]); \ 181f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } \ 182f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef SkDisplay##_type BASE_CLASS 183f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 184f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_EMPTY_MEMBER_INFO(_type) \ 185f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 186f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } 187f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 188f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_EXTRAS_MEMBER_INFO(_type) \ 189f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 190f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo fInfo[]; \ 191f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const int fInfoCount; \ 192f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index); \ 193f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]); \ 194f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes fType; \ 195f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return fType; } \ 196f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef _type BASE_CLASS 197f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 198f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_NO_VIRTUALS_MEMBER_INFO(_type) \ 199f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 200f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const SkMemberInfo fInfo[]; \ 201f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger static const int fInfoCount; \ 202f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef Sk##_type BASE_CLASS 203f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 204f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DEFINE_GET_MEMBER(_class) \ 205f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const SkMemberInfo* _class::getMember(int index) { \ 206f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const SkMemberInfo* result = SkMemberInfo::Find(fInfo, SK_ARRAY_COUNT(fInfo), &index); \ 207f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return result; \ 208f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } \ 209f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const SkMemberInfo* _class::getMember(const char name[]) { \ 210f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const SkMemberInfo* result = SkMemberInfo::Find(fInfo, SK_ARRAY_COUNT(fInfo), &name); \ 211f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return result; \ 212f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } \ 213f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const int _class::fInfoCount = SK_ARRAY_COUNT(fInfo) 214f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 215f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DEFINE_NO_VIRTUALS_GET_MEMBER(_class) \ 216f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const int _class::fInfoCount = SK_ARRAY_COUNT(fInfo) 217f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 218f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#else 219f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 220f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_PRIVATE_MEMBER_INFO(_type) \ 221f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 222f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef Sk##_type BASE_CLASS 223f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 224f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_MEMBER_INFO(_type) \ 225f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 226f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index) { \ 227f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &index); } \ 228f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]) { \ 229f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &name); } \ 230f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } \ 231f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef Sk##_type BASE_CLASS 232f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 233f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_DRAW_MEMBER_INFO(_type) \ 234f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 235f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index) { \ 236f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &index); } \ 237f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]) { \ 238f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &name); } \ 239f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } \ 240f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef SkDraw##_type BASE_CLASS 241f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 242f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_DISPLAY_MEMBER_INFO(_type) \ 243f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 244f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index) { \ 245f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &index); } \ 246f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]) { \ 247f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &name); } \ 248f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return SkType_##_type; } \ 249f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef SkDisplay##_type BASE_CLASS 250f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 251f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_EXTRAS_MEMBER_INFO(_type) \ 252f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 253f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(int index) { \ 254f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, SkType_##_type, &index); } \ 255f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual const SkMemberInfo* getMember(const char name[]) { \ 256f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return SkDisplayType::GetMember(NULL, fType, &name); } \ 257f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkDisplayTypes fType; \ 258f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger virtual SkDisplayTypes getType() const { return fType; } \ 259f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef _type BASE_CLASS 260f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 261f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DECLARE_NO_VIRTUALS_MEMBER_INFO(_type) \ 262f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: \ 263f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger typedef Sk##_type BASE_CLASS 264f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 265f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DEFINE_GET_MEMBER(_class) 266f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define DEFINE_NO_VIRTUALS_GET_MEMBER(_class) 267f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 268f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 269f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 270f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif // SkMemberInfo_DEFINED 271f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 272