#include <new>
#include <utility>
-template <typename T, bool MEM_COPY = false> class SkTArray;
-template <typename T, bool MEM_COPY> void* operator new(size_t, SkTArray<T, MEM_COPY>*, int);
-
/** When MEM_COPY is true T will be bit copied when moved.
When MEM_COPY is false, T will be copy constructed / destructed.
In all cases T will be default-initialized on allocation,
and its destructor will be called from this object's destructor.
*/
-template <typename T, bool MEM_COPY> class SkTArray {
+template <typename T, bool MEM_COPY = false> class SkTArray {
public:
/**
* Creates an empty array with no initial storage
}
}
- friend void* operator new<T>(size_t, SkTArray*, int);
-
int fReserveCount;
int fCount;
int fAllocCount;
};
};
-// Use the below macro (SkNEW_APPEND_TO_TARRAY) rather than calling this directly
-template <typename T, bool MEM_COPY>
-void* operator new(size_t, SkTArray<T, MEM_COPY>* array, int SkDEBUGCODE(atIndex)) {
- // Currently, we only support adding to the end of the array. When the array class itself
- // supports random insertion then this should be updated.
- // SkASSERT(atIndex >= 0 && atIndex <= array->count());
- SkASSERT(atIndex == array->count());
- return array->push_back_raw(1);
-}
-
-// Skia doesn't use C++ exceptions but it may be compiled with them enabled. Having an op delete
-// to match the op new silences warnings about missing op delete when a constructor throws an
-// exception.
-template <typename T, bool MEM_COPY>
-void operator delete(void*, SkTArray<T, MEM_COPY>* /*array*/, int /*atIndex*/) {
- SK_ABORT("Invalid Operation");
-}
-
-// Constructs a new object as the last element of an SkTArray.
-#define SkNEW_APPEND_TO_TARRAY(array_ptr, type_name, args) \
- (new ((array_ptr), (array_ptr)->count()) type_name args)
-
-
/**
* Subclass of SkTArray that contains a preallocated memory block for the array.
*/
fUniformHandler.addUniform(GrGLSLUniformHandler::kFragment_Visibility,
samplerType, kDefault_GrSLPrecision,
name.c_str());
- SkNEW_APPEND_TO_TARRAY(outSamplers, GrGLSLTextureSampler,
- (localSamplerUniforms[t], processor.textureAccess(t)));
+ outSamplers->emplace_back(localSamplerUniforms[t], processor.textureAccess(t));
if (kSamplerExternal_GrSLType == samplerType) {
const char* externalFeatureString = this->glslCaps()->externalTextureExtensionString();
// We shouldn't ever create a GrGLTexture that requires external sampler type
varyingHandler->addVarying(strVaryingName.c_str(), &v, precision);
SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingType);
- SkNEW_APPEND_TO_TARRAY(&(*tout)[i], GrGLSLTransformedCoords,
- (SkString(v.fsIn()), varyingType));
+ (*tout)[i].emplace_back(SkString(v.fsIn()), varyingType);
// varying = matrix * coords (logically)
if (kDevice_GrCoordSet == coordType) {
varyingHandler->addVarying(strVaryingName.c_str(), &v, precision);
vb->codeAppendf("%s = %s;", v.vsOut(), localCoords);
- SkNEW_APPEND_TO_TARRAY(&(*tout)[i],
- GrGLSLTransformedCoords,
- (SkString(v.fsIn()), varyingType));
+ (*tout)[i].emplace_back(SkString(v.fsIn()), varyingType);
}
}
}