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