| Index: base/scoped_ptr_cotask.h
|
| diff --git a/base/scoped_ptr_cotask.h b/base/scoped_ptr_cotask.h
|
| deleted file mode 100644
|
| index 85dc2a1b1d348a761f68ce821ad8bc1ac1e056a7..0000000000000000000000000000000000000000
|
| --- a/base/scoped_ptr_cotask.h
|
| +++ /dev/null
|
| @@ -1,260 +0,0 @@
|
| -// Copyright 2007-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -//
|
| -// Defines utility classes and functions which facilitate working with the
|
| -// memory allocation functions CoTaskMemAlloc and CoTaskMemFree.
|
| -
|
| -#ifndef OMAHA_COMMON_SCOPED_PTR_COTASK_H__
|
| -#define OMAHA_COMMON_SCOPED_PTR_COTASK_H__
|
| -
|
| -#include "omaha/base/debug.h"
|
| -
|
| -// scoped_ptr_cotask is identical to scoped_ptr, except that CoTaskMemFree is
|
| -// called instead of delete. For documentation of the interface, see
|
| -// scoped_ptr.h.
|
| -
|
| -template <typename T>
|
| -class scoped_ptr_cotask;
|
| -
|
| -template <typename T>
|
| -scoped_ptr_cotask<T> make_scoped_ptr_cotask(T* p);
|
| -
|
| -template <typename T>
|
| -class scoped_ptr_cotask {
|
| - private:
|
| - T* ptr_;
|
| -
|
| - scoped_ptr_cotask(scoped_ptr_cotask const &);
|
| - scoped_ptr_cotask & operator=(scoped_ptr_cotask const &);
|
| -
|
| - friend scoped_ptr_cotask<T> make_scoped_ptr_cotask<T>(T* p);
|
| -
|
| - public:
|
| - typedef T element_type;
|
| -
|
| - explicit scoped_ptr_cotask(T* p = 0): ptr_(p) {}
|
| -
|
| - ~scoped_ptr_cotask() {
|
| - typedef char type_must_be_complete[sizeof(T)];
|
| - ::CoTaskMemFree(ptr_);
|
| - }
|
| -
|
| - void reset(T* p = 0) {
|
| - typedef char type_must_be_complete[sizeof(T)];
|
| -
|
| - if (ptr_ != p) {
|
| - ::CoTaskMemFree(ptr_);
|
| - ptr_ = p;
|
| - }
|
| - }
|
| -
|
| - T& operator*() const {
|
| - assert(ptr_ != 0);
|
| - return *ptr_;
|
| - }
|
| -
|
| - T* operator->() const {
|
| - assert(ptr_ != 0);
|
| - return ptr_;
|
| - }
|
| -
|
| - bool operator==(T* p) const {
|
| - return ptr_ == p;
|
| - }
|
| -
|
| - bool operator!=(T* p) const {
|
| - return ptr_ != p;
|
| - }
|
| -
|
| - T* get() const {
|
| - return ptr_;
|
| - }
|
| -
|
| - void swap(scoped_ptr_cotask & b) {
|
| - T* tmp = b.ptr_;
|
| - b.ptr_ = ptr_;
|
| - ptr_ = tmp;
|
| - }
|
| -
|
| - T* release() {
|
| - T* tmp = ptr_;
|
| - ptr_ = 0;
|
| - return tmp;
|
| - }
|
| -
|
| - private:
|
| - template <typename U> bool operator==(scoped_ptr_cotask<U> const& p) const;
|
| - template <typename U> bool operator!=(scoped_ptr_cotask<U> const& p) const;
|
| -};
|
| -
|
| -template <typename T>
|
| -scoped_ptr_cotask<T> make_scoped_ptr_cotask(T* p) {
|
| - return scoped_ptr_cotask<T>(p);
|
| -}
|
| -
|
| -template <typename T> inline
|
| -void swap(scoped_ptr_cotask<T>& a, scoped_ptr_cotask<T>& b) {
|
| - a.swap(b);
|
| -}
|
| -
|
| -template <typename T> inline
|
| -bool operator==(T* p, const scoped_ptr_cotask<T>& b) {
|
| - return p == b.get();
|
| -}
|
| -
|
| -template <typename T> inline
|
| -bool operator!=(T* p, const scoped_ptr_cotask<T>& b) {
|
| - return p != b.get();
|
| -}
|
| -
|
| -template <typename T>
|
| -inline T** address(const scoped_ptr_cotask<T>& t) {
|
| - COMPILE_ASSERT(sizeof(T*) == sizeof(t), types_do_not_match);
|
| - ASSERT1(!t.get());
|
| - return reinterpret_cast<T**>(&const_cast<scoped_ptr_cotask<T>&>(t));
|
| -}
|
| -
|
| -// scoped_array_cotask manages an array of pointers to objects allocated by
|
| -// CoTaskMemAlloc. The array is also allocated via CoTaskMemAlloc. The
|
| -// interface is similar to scoped_array, except that an array length must be
|
| -// explicitly provided. When the object is destructed, the array and each
|
| -// element of the array are explicitly freed.
|
| -
|
| -template <typename T>
|
| -class scoped_array_cotask;
|
| -
|
| -template <typename T>
|
| -class scoped_array_cotask<T*> {
|
| - private:
|
| - size_t count_;
|
| - T** ptr_;
|
| -
|
| - scoped_array_cotask(scoped_array_cotask const &);
|
| - scoped_array_cotask & operator=(scoped_array_cotask const &);
|
| -
|
| - public:
|
| - typedef T* element_type;
|
| -
|
| - explicit scoped_array_cotask(size_t c, T** p = 0)
|
| - : count_(c), ptr_(p) {
|
| - if (!ptr_) {
|
| - const size_t array_size = sizeof(T*) * count_;
|
| - ptr_ = static_cast<T**>(::CoTaskMemAlloc(array_size));
|
| - memset(ptr_, 0, array_size);
|
| - }
|
| - }
|
| -
|
| - ~scoped_array_cotask() {
|
| - typedef char type_must_be_complete[sizeof(T*)];
|
| - if (ptr_) {
|
| - for (size_t i = 0; i < count_; ++i) {
|
| - ::CoTaskMemFree(ptr_[i]);
|
| - }
|
| - ::CoTaskMemFree(ptr_);
|
| - }
|
| - }
|
| -
|
| - size_t size() const { return count_; }
|
| -
|
| - void reset(size_t c, T** p = 0) {
|
| - typedef char type_must_be_complete[sizeof(T*)];
|
| -
|
| - if (ptr_ != p) {
|
| - if (ptr_) {
|
| - for (size_t i = 0; i < count_; ++i) {
|
| - ::CoTaskMemFree(ptr_[i]);
|
| - }
|
| - ::CoTaskMemFree(ptr_);
|
| - }
|
| - ptr_ = p;
|
| - }
|
| - count_ = c;
|
| - if (!ptr_) {
|
| - const size_t array_size = sizeof(T*) * count_;
|
| - ptr_ = static_cast<T**>(::CoTaskMemAlloc(array_size));
|
| - memset(ptr_, 0, array_size);
|
| - }
|
| - }
|
| -
|
| - T*& operator[](std::ptrdiff_t i) const {
|
| - assert(ptr_ != 0);
|
| - assert(i >= 0);
|
| - return ptr_[i];
|
| - }
|
| -
|
| - bool operator==(T** p) const {
|
| - return ptr_ == p;
|
| - }
|
| -
|
| - bool operator!=(T** p) const {
|
| - return ptr_ != p;
|
| - }
|
| -
|
| - T** get() const {
|
| - return ptr_;
|
| - }
|
| -
|
| - void swap(scoped_array_cotask & b) {
|
| - T** tmp = b.ptr_;
|
| - b.ptr_ = ptr_;
|
| - ptr_ = tmp;
|
| - }
|
| -
|
| - T** release() {
|
| - T** tmp = ptr_;
|
| - ptr_ = 0;
|
| - return tmp;
|
| - }
|
| -
|
| - private:
|
| - template <typename U> bool operator==(scoped_array_cotask<U> const& p) const;
|
| - template <typename U> bool operator!=(scoped_array_cotask<U> const& p) const;
|
| -};
|
| -
|
| -template <typename T> inline
|
| -void swap(scoped_array_cotask<T>& a, scoped_array_cotask<T>& b) {
|
| - a.swap(b);
|
| -}
|
| -
|
| -template <typename T> inline
|
| -bool operator==(T* p, const scoped_array_cotask<T>& b) {
|
| - return p == b.get();
|
| -}
|
| -
|
| -template <typename T> inline
|
| -bool operator!=(T* p, const scoped_array_cotask<T>& b) {
|
| - return p != b.get();
|
| -}
|
| -
|
| -// address() is not relevant to scoped_array_cotask, due to the count parameter.
|
| -//
|
| -// template <typename T>
|
| -// inline T** address(const scoped_array_cotask<T>& t) {
|
| -// COMPILE_ASSERT(sizeof(T*) == sizeof(t), types_do_not_match);
|
| -// ASSERT1(!t.get());
|
| -// return reinterpret_cast<T**>(&const_cast<scoped_array_cotask<T>&>(t));
|
| -// }
|
| -
|
| -// StrDupCoTask allocates a copy of a string using CoTaskMemAlloc.
|
| -
|
| -template <class T>
|
| -inline T* StrDupCoTask(const T* str, size_t length) {
|
| - T* mem = static_cast<T*>(::CoTaskMemAlloc(sizeof(T) * (length + 1)));
|
| - memcpy(mem, str, sizeof(T) * length);
|
| - mem[length] = 0;
|
| - return mem;
|
| -}
|
| -
|
| -#endif // OMAHA_COMMON_SCOPED_PTR_COTASK_H__
|
|
|