rsElement.cpp revision d01d970cf5973aa5186cc02c80fb2c143a69b0b1
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h" 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 19565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams#include <GLES/gl.h> 20565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 25e514b45de8561fbc6ef6770845102ca10b0a69d7Jason SamsElement::Element(Context *rsc) : ObjectBase(rsc) 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 274815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mBits = 0; 28f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mAllocFile = __FILE__; 29f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mAllocLine = __LINE__; 304815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFields = NULL; 314815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFieldCount = 0; 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 35326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsElement::~Element() 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Element::clear() 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 424815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams delete [] mFields; 434815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFields = NULL; 444815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFieldCount = 0; 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 464815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams/* 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Element::setComponent(uint32_t idx, Component *c) 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsAssert(!mComponents[idx].get()); 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsAssert(idx < mComponentCount); 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mComponents[idx].set(c); 52e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 53e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams// Fixme: This should probably not be here 549397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams c->incUserRef(); 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 564815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams*/ 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Samssize_t Element::getSizeBits() const 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 604815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (!mFieldCount) { 614815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return mBits; 624815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 634815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams size_t total = 0; 654815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (size_t ct=0; ct < mFieldCount; ct++) { 664815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams total += mFields[ct].e->mBits; 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return total; 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 714815c0d121310cfcd6a8aba4eab77a9910af53acJason Samssize_t Element::getFieldOffsetBits(uint32_t componentNumber) const 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams size_t offset = 0; 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for (uint32_t ct = 0; ct < componentNumber; ct++) { 754815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams offset += mFields[ct].e->mBits; 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return offset; 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 80e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Samsvoid Element::dumpLOGV(const char *prefix) const 81e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams{ 82e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams ObjectBase::dumpLOGV(prefix); 834815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams LOGV("%s Element: components %i, size %i", prefix, mFieldCount, mBits); 844815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (uint32_t ct = 0; ct < mFieldCount; ct++) { 85e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams char buf[1024]; 86e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams sprintf(buf, "%s component %i: ", prefix, ct); 874815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //mComponents[ct]->dumpLOGV(buf); 88e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams } 89e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams} 90e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 91d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 92d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsElement * Element::create(Context *rsc, RsDataType dt, RsDataKind dk, 93d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams bool isNorm, uint32_t vecSize) 944815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams{ 954815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *e = new Element(rsc); 96d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams e->mComponent.set(dt, dk, isNorm, vecSize); 97d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams e->mBits = e->mComponent.getBits(); 984815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return e; 994815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams} 1004815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 101d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsElement * Element::create(Context *rsc, size_t count, const Element **ein, 102d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams const char **nin, const size_t * lengths) 1034815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams{ 1044815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *e = new Element(rsc); 1054815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFields = new ElementField_t [count]; 1064815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFieldCount = count; 1074815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 1084815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (size_t ct=0; ct < count; ct++) { 1094815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFields[ct].e.set(ein[ct]); 1104815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFields[ct].name.setTo(nin[ct], lengths[ct]); 111d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams LOGE("element %p %s", ein[ct], e->mFields[ct].name.string()); 1124815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1134815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 1144815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return e; 1154815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams} 1164815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 117d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsString8 Element::getCStructBody(uint32_t indent) const 118d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{ 119d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams String8 si; 120d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams for (uint32_t ct=0; ct < indent; ct++) { 121d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams si.append(" "); 122d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } 123d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 124d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams String8 s(si); 125d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append("{\n"); 126d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams for (uint32_t ct = 0; ct < mFieldCount; ct++) { 127d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(si); 128d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(mFields[ct].e->getCType(indent+4)); 129d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(" "); 130d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(mFields[ct].name); 131d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(";\n"); 132d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } 133d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(si); 134d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append("}"); 135d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams return s; 136d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams} 137d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 138d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsString8 Element::getCType(uint32_t indent) const 139d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{ 140d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams String8 s; 141d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams for (uint32_t ct=0; ct < indent; ct++) { 142d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(" "); 143d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } 144d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 145d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams if (!mFieldCount) { 146d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams // Basic component. 147d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(mComponent.getCType()); 148d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } else { 149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append("struct "); 150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams s.append(getCStructBody(indent)); 151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams } 152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams return s; 154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams} 155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 156d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 157d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams 1584815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 159326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsElementState::ElementState() 160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 163326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsElementState::~ElementState() 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 1674815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams///////////////////////////////////////// 169e5ffb879ae535a899a486285a23bea05e912480fJason Sams// 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 172326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 174d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsRsElement rsi_ElementCreate(Context *rsc, 175d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams RsDataType dt, 176d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams RsDataKind dk, 177d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams bool norm, 178d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams uint32_t vecSize) 179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 180d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams //LOGE("rsi_ElementCreate %i %i %i %i", dt, dk, norm, vecSize); 181d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams Element *e = Element::create(rsc, dt, dk, norm, vecSize); 182d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams e->incUserRef(); 183d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams return e; 184d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams} 1854815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 186d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsRsElement rsi_ElementCreate2(Context *rsc, 187d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams size_t count, 188d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams const RsElement * ein, 189d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams const char ** names, 190d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams const size_t * nameLengths) 191d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{ 192d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams //LOGE("rsi_ElementCreate2 %i", count); 193d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams Element *e = Element::create(rsc, count, (const Element **)ein, names, nameLengths); 194d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams e->incUserRef(); 195d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams return e; 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 198d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams/* 1998b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Samsvoid rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name) 200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ElementState * sec = &rsc->mStateElement; 202e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 203e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams rsAssert(bits > 0); 204e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 2054815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *c = Element::create(rsc, dk, dt, isNormalized, bits); 2064815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.add(c); 2074815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (name) 2084815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.add(String8(name)); 2094815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams else 2104815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.add(String8("")); 211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 213326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsElement rsi_ElementCreate(Context *rsc) 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ElementState * sec = &rsc->mStateElement; 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2174815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t count = sec->mBuildList.size(); 2184815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams rsAssert(count > 0); 2194815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2204815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (count == 1) { 2214815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *se = sec->mBuildList[0]; 2224815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams se->incUserRef(); 2234815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.clear(); 2244815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.clear(); 2254815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return se; 2264815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 2274815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2284815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element ** tmpElements = (Element **)calloc(count, sizeof(Element *)); 2294815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const char ** tmpNames = (const char **)calloc(count, sizeof(char *)); 2304815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t * tmpLengths = (size_t *)calloc(count, sizeof(size_t)); 2314815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 232e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 2334815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (size_t ct = 0; ct < count; ct++) { 2344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams tmpElements[ct] = sec->mBuildList[ct]; 2354815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams tmpNames[ct] = sec->mNames[ct].string(); 2364815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams tmpLengths[ct] = sec->mNames[ct].length(); 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 2384815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *se = Element::create(rsc, tmpElements, tmpNames, tmpLengths, count); 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2404815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.clear(); 2414815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.clear(); 2429397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams se->incUserRef(); 2434815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams free(tmpElements); 2444815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams free(tmpNames); 2454815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams free(tmpLengths); 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return se; 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 248d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams*/ 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 253