Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/core/SkData.cpp

Issue 1193553002: simplify release-proc for SkData, removing unneeded size param (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/core/SkData.h ('k') | src/pdf/SkPDFFont.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkData.h" 8 #include "SkData.h"
9 #include "SkLazyPtr.h" 9 #include "SkLazyPtr.h"
10 #include "SkOSFile.h" 10 #include "SkOSFile.h"
11 #include "SkReadBuffer.h" 11 #include "SkReadBuffer.h"
12 #include "SkStream.h" 12 #include "SkStream.h"
13 #include "SkWriteBuffer.h" 13 #include "SkWriteBuffer.h"
14 14
15 #ifdef SK_SUPPORT_LEGACY_DATARELEASEPROC_PARAMS
16 SkData::SkData(const void* ptr, size_t size, ReleaseProc proc, void* context,
17 LegacyReleaseProc legacyProc) {
18 #else
15 SkData::SkData(const void* ptr, size_t size, ReleaseProc proc, void* context) { 19 SkData::SkData(const void* ptr, size_t size, ReleaseProc proc, void* context) {
20 #endif
16 fPtr = const_cast<void*>(ptr); 21 fPtr = const_cast<void*>(ptr);
17 fSize = size; 22 fSize = size;
18 fReleaseProc = proc; 23 fReleaseProc = proc;
19 fReleaseProcContext = context; 24 fReleaseProcContext = context;
25 #ifdef SK_SUPPORT_LEGACY_DATARELEASEPROC_PARAMS
26 fLegacyReleaseProc = legacyProc;
27 #endif
20 } 28 }
21 29
22 // This constructor means we are inline with our fPtr's contents. Thus we set fP tr 30 // This constructor means we are inline with our fPtr's contents. Thus we set fP tr
23 // to point right after this. We also set our releaseproc to sk_inplace_sentinel _releaseproc, 31 // to point right after this. We also set our releaseproc to sk_inplace_sentinel _releaseproc,
24 // since we need to handle "delete" ourselves. See internal_displose(). 32 // since we need to handle "delete" ourselves. See internal_displose().
25 // 33 //
26 SkData::SkData(size_t size) { 34 SkData::SkData(size_t size) {
27 fPtr = (char*)(this + 1); // contents are immediately after this 35 fPtr = (char*)(this + 1); // contents are immediately after this
28 fSize = size; 36 fSize = size;
29 fReleaseProc = NULL; 37 fReleaseProc = NULL;
30 fReleaseProcContext = NULL; 38 fReleaseProcContext = NULL;
39 #ifdef SK_SUPPORT_LEGACY_DATARELEASEPROC_PARAMS
40 fLegacyReleaseProc = NULL;
41 #endif
31 } 42 }
32 43
33 SkData::~SkData() { 44 SkData::~SkData() {
34 if (fReleaseProc) { 45 if (fReleaseProc) {
35 fReleaseProc(fPtr, fSize, fReleaseProcContext); 46 fReleaseProc(fPtr, fReleaseProcContext);
36 } 47 }
48 #ifdef SK_SUPPORT_LEGACY_DATARELEASEPROC_PARAMS
49 if (fLegacyReleaseProc) {
50 fLegacyReleaseProc(fPtr, fSize, fReleaseProcContext);
51 }
52 #endif
37 } 53 }
38 54
39 bool SkData::equals(const SkData* other) const { 55 bool SkData::equals(const SkData* other) const {
40 if (NULL == other) { 56 if (NULL == other) {
41 return false; 57 return false;
42 } 58 }
43 59
44 return fSize == other->fSize && !memcmp(fPtr, other->fPtr, fSize); 60 return fSize == other->fSize && !memcmp(fPtr, other->fPtr, fSize);
45 } 61 }
46 62
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 SkData* sk_new_empty_data() { return new SkData(NULL, 0, NULL, NULL); } 100 SkData* sk_new_empty_data() { return new SkData(NULL, 0, NULL, NULL); }
85 namespace { void sk_unref_data(SkData* ptr) { return SkSafeUnref(ptr); } } 101 namespace { void sk_unref_data(SkData* ptr) { return SkSafeUnref(ptr); } }
86 102
87 SK_DECLARE_STATIC_LAZY_PTR(SkData, empty, sk_new_empty_data, sk_unref_data); 103 SK_DECLARE_STATIC_LAZY_PTR(SkData, empty, sk_new_empty_data, sk_unref_data);
88 104
89 SkData* SkData::NewEmpty() { 105 SkData* SkData::NewEmpty() {
90 return SkRef(empty.get()); 106 return SkRef(empty.get());
91 } 107 }
92 108
93 // assumes fPtr was allocated via sk_malloc 109 // assumes fPtr was allocated via sk_malloc
94 static void sk_free_releaseproc(const void* ptr, size_t, void*) { 110 static void sk_free_releaseproc(const void* ptr, void*) {
95 sk_free((void*)ptr); 111 sk_free((void*)ptr);
96 } 112 }
97 113
98 SkData* SkData::NewFromMalloc(const void* data, size_t length) { 114 SkData* SkData::NewFromMalloc(const void* data, size_t length) {
99 return new SkData(data, length, sk_free_releaseproc, NULL); 115 return new SkData(data, length, sk_free_releaseproc, NULL);
100 } 116 }
101 117
102 SkData* SkData::NewWithCopy(const void* src, size_t length) { 118 SkData* SkData::NewWithCopy(const void* src, size_t length) {
103 SkASSERT(src); 119 SkASSERT(src);
104 return PrivateNewWithCopy(src, length); 120 return PrivateNewWithCopy(src, length);
105 } 121 }
106 122
107 SkData* SkData::NewUninitialized(size_t length) { 123 SkData* SkData::NewUninitialized(size_t length) {
108 return PrivateNewWithCopy(NULL, length); 124 return PrivateNewWithCopy(NULL, length);
109 } 125 }
110 126
111 SkData* SkData::NewWithProc(const void* data, size_t length, 127 SkData* SkData::NewWithProc(const void* ptr, size_t length, ReleaseProc proc, vo id* context) {
112 ReleaseProc proc, void* context) { 128 return new SkData(ptr, length, proc, context);
113 return new SkData(data, length, proc, context);
114 } 129 }
115 130
131 #ifdef SK_SUPPORT_LEGACY_DATARELEASEPROC_PARAMS
132 SkData* SkData::NewWithProc(const void* ptr, size_t length, LegacyReleaseProc pr oc, void* ctx) {
133 return new SkData(ptr, length, NULL, ctx, proc);
134 }
135 #endif
136
116 // assumes fPtr was allocated with sk_fmmap 137 // assumes fPtr was allocated with sk_fmmap
117 static void sk_mmap_releaseproc(const void* addr, size_t length, void*) { 138 static void sk_mmap_releaseproc(const void* addr, void* ctx) {
139 size_t length = reinterpret_cast<size_t>(ctx);
118 sk_fmunmap(addr, length); 140 sk_fmunmap(addr, length);
119 } 141 }
120 142
121 SkData* SkData::NewFromFILE(SkFILE* f) { 143 SkData* SkData::NewFromFILE(SkFILE* f) {
122 size_t size; 144 size_t size;
123 void* addr = sk_fmmap(f, &size); 145 void* addr = sk_fmmap(f, &size);
124 if (NULL == addr) { 146 if (NULL == addr) {
125 return NULL; 147 return NULL;
126 } 148 }
127 149
128 return SkData::NewWithProc(addr, size, sk_mmap_releaseproc, NULL); 150 return SkData::NewWithProc(addr, size, sk_mmap_releaseproc, reinterpret_cast <void*>(size));
129 } 151 }
130 152
131 SkData* SkData::NewFromFileName(const char path[]) { 153 SkData* SkData::NewFromFileName(const char path[]) {
132 SkFILE* f = path ? sk_fopen(path, kRead_SkFILE_Flag) : NULL; 154 SkFILE* f = path ? sk_fopen(path, kRead_SkFILE_Flag) : NULL;
133 if (NULL == f) { 155 if (NULL == f) {
134 return NULL; 156 return NULL;
135 } 157 }
136 SkData* data = NewFromFILE(f); 158 SkData* data = NewFromFILE(f);
137 sk_fclose(f); 159 sk_fclose(f);
138 return data; 160 return data;
139 } 161 }
140 162
141 SkData* SkData::NewFromFD(int fd) { 163 SkData* SkData::NewFromFD(int fd) {
142 size_t size; 164 size_t size;
143 void* addr = sk_fdmmap(fd, &size); 165 void* addr = sk_fdmmap(fd, &size);
144 if (NULL == addr) { 166 if (NULL == addr) {
145 return NULL; 167 return NULL;
146 } 168 }
147 169
148 return SkData::NewWithProc(addr, size, sk_mmap_releaseproc, NULL); 170 return SkData::NewWithProc(addr, size, sk_mmap_releaseproc, NULL);
149 } 171 }
150 172
151 // assumes context is a SkData 173 // assumes context is a SkData
152 static void sk_dataref_releaseproc(const void*, size_t, void* context) { 174 static void sk_dataref_releaseproc(const void*, void* context) {
153 SkData* src = reinterpret_cast<SkData*>(context); 175 SkData* src = reinterpret_cast<SkData*>(context);
154 src->unref(); 176 src->unref();
155 } 177 }
156 178
157 SkData* SkData::NewSubset(const SkData* src, size_t offset, size_t length) { 179 SkData* SkData::NewSubset(const SkData* src, size_t offset, size_t length) {
158 /* 180 /*
159 We could, if we wanted/need to, just make a deep copy of src's data, 181 We could, if we wanted/need to, just make a deep copy of src's data,
160 rather than referencing it. This would duplicate the storage (of the 182 rather than referencing it. This would duplicate the storage (of the
161 subset amount) but would possibly allow src to go out of scope sooner. 183 subset amount) but would possibly allow src to go out of scope sooner.
162 */ 184 */
(...skipping 27 matching lines...) Expand all
190 /////////////////////////////////////////////////////////////////////////////// 212 ///////////////////////////////////////////////////////////////////////////////
191 213
192 SkData* SkData::NewFromStream(SkStream* stream, size_t size) { 214 SkData* SkData::NewFromStream(SkStream* stream, size_t size) {
193 SkAutoDataUnref data(SkData::NewUninitialized(size)); 215 SkAutoDataUnref data(SkData::NewUninitialized(size));
194 if (stream->read(data->writable_data(), size) != size) { 216 if (stream->read(data->writable_data(), size) != size) {
195 return NULL; 217 return NULL;
196 } 218 }
197 return data.detach(); 219 return data.detach();
198 } 220 }
199 221
OLDNEW
« no previous file with comments | « include/core/SkData.h ('k') | src/pdf/SkPDFFont.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698