aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/xml/SkDOM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/xml/SkDOM.cpp')
-rw-r--r--src/xml/SkDOM.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/xml/SkDOM.cpp b/src/xml/SkDOM.cpp
index b1cf1d5360..37b230b949 100644
--- a/src/xml/SkDOM.cpp
+++ b/src/xml/SkDOM.cpp
@@ -48,16 +48,17 @@ struct SkDOMNode {
const char* fName;
SkDOMNode* fFirstChild;
SkDOMNode* fNextSibling;
+ SkDOMAttr* fAttrs;
uint16_t fAttrCount;
uint8_t fType;
uint8_t fPad;
const SkDOMAttr* attrs() const {
- return (const SkDOMAttr*)(this + 1);
+ return fAttrs;
}
SkDOMAttr* attrs() {
- return (SkDOMAttr*)(this + 1);
+ return fAttrs;
}
};
@@ -175,17 +176,17 @@ const char* SkDOM::AttrIter::next(const char** value) {
#include "SkXMLParser.h"
#include "SkTDArray.h"
-static char* dupstr(SkChunkAlloc* chunk, const char src[]) {
+static char* dupstr(SkArenaAlloc* chunk, const char src[]) {
SkASSERT(chunk && src);
size_t len = strlen(src);
- char* dst = (char*)chunk->alloc(len + 1, SkChunkAlloc::kThrow_AllocFailType);
+ char* dst = chunk->makeArrayDefault<char>(len + 1);
memcpy(dst, src, len + 1);
return dst;
}
class SkDOMParser : public SkXMLParser {
public:
- SkDOMParser(SkChunkAlloc* chunk) : SkXMLParser(&fParserError), fAlloc(chunk) {
+ SkDOMParser(SkArenaAlloc* chunk) : SkXMLParser(&fParserError), fAlloc(chunk) {
fAlloc->reset();
fRoot = nullptr;
fLevel = 0;
@@ -200,12 +201,13 @@ protected:
int attrCount = fAttrs.count();
- SkDOM::Node* node = (SkDOM::Node*)fAlloc->alloc(sizeof(SkDOM::Node) + attrCount * sizeof(SkDOM::Attr),
- SkChunkAlloc::kThrow_AllocFailType);
+ SkDOMAttr* attrs = fAlloc->makeArrayDefault<SkDOMAttr>(attrCount);
+ SkDOM::Node* node = fAlloc->make<SkDOM::Node>();
node->fName = fElemName;
node->fFirstChild = nullptr;
node->fAttrCount = SkToU16(attrCount);
+ node->fAttrs = attrs;
node->fType = fElemType;
if (fRoot == nullptr) {
@@ -278,7 +280,7 @@ private:
}
SkTDArray<SkDOM::Node*> fParentStack;
- SkChunkAlloc* fAlloc;
+ SkArenaAlloc* fAlloc;
SkDOM::Node* fRoot;
bool fNeedToFlush;