Skip to content

Commit

Permalink
Clean up final uses of scoped_ptr<T>::PassAs() and remove it.
Browse files Browse the repository at this point in the history
This helper to upcast in return statements is no longer needed.

BUG=423621

Review URL: https://codereview.chromium.org/663243003

Cr-Commit-Position: refs/heads/master@{#300548}
  • Loading branch information
zetafunction authored and Commit bot committed Oct 21, 2014
1 parent ccbfe27 commit 19b6b65
Show file tree
Hide file tree
Showing 4 changed files with 2 additions and 50 deletions.
21 changes: 0 additions & 21 deletions base/memory/scoped_ptr.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,6 @@
//
// scoped_ptr<Foo> foo(new Foo());
// scoped_ptr<FooParent> parent(foo.Pass());
//
// PassAs<>() should be used to upcast return value in return statement:
//
// scoped_ptr<Foo> CreateFoo() {
// scoped_ptr<FooChild> result(new FooChild());
// return result.PassAs<Foo>();
// }
//
// Note that PassAs<>() is implemented only for scoped_ptr<T>, but not for
// scoped_ptr<T[]>. This is because casting array pointers may not be safe.

#ifndef BASE_MEMORY_SCOPED_PTR_H_
#define BASE_MEMORY_SCOPED_PTR_H_
Expand Down Expand Up @@ -436,17 +426,6 @@ class scoped_ptr {
return impl_.release();
}

// C++98 doesn't support functions templates with default parameters which
// makes it hard to write a PassAs() that understands converting the deleter
// while preserving simple calling semantics.
//
// Until there is a use case for PassAs() with custom deleters, just ignore
// the custom deleter.
template <typename PassAsType>
scoped_ptr<PassAsType> PassAs() {
return scoped_ptr<PassAsType>(Pass());
}

private:
// Needed to reach into |impl_| in the constructor.
template <typename U, typename V> friend class scoped_ptr;
Expand Down
21 changes: 0 additions & 21 deletions base/memory/scoped_ptr_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,6 @@ scoped_ptr<ConDecLogger> TestReturnOfType(int* constructed) {
return scoped_ptr<ConDecLogger>(new ConDecLogger(constructed));
}

scoped_ptr<ConDecLoggerParent> UpcastUsingPassAs(
scoped_ptr<ConDecLogger> object) {
return object.PassAs<ConDecLoggerParent>();
}

} // namespace

TEST(ScopedPtrTest, ScopedPtr) {
Expand Down Expand Up @@ -462,22 +457,6 @@ TEST(ScopedPtrTest, ReturnTypeBehavior) {
EXPECT_EQ(0, constructed);
}

TEST(ScopedPtrTest, PassAs) {
int constructed = 0;
{
scoped_ptr<ConDecLogger> scoper(new ConDecLogger(&constructed));
EXPECT_EQ(1, constructed);
EXPECT_TRUE(scoper.get());

scoped_ptr<ConDecLoggerParent> scoper_parent;
scoper_parent = UpcastUsingPassAs(scoper.Pass());
EXPECT_EQ(1, constructed);
EXPECT_TRUE(scoper_parent.get());
EXPECT_FALSE(scoper.get());
}
EXPECT_EQ(0, constructed);
}

TEST(ScopedPtrTest, CustomDeleter) {
double dummy_value; // Custom deleter never touches this value.
int deletes = 0;
Expand Down
6 changes: 0 additions & 6 deletions cc/PRESUBMIT.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,12 +191,6 @@ def CheckScopedPtr(input_api, output_api,
errors.append(output_api.PresubmitError(
'%s:%d uses scoped_ptr<T>(). Use nullptr instead.' %
(f.LocalPath(), line_number)))
# Disallow:
# foo.PassAs<T>();
if re.search(r'\bPassAs<.*?>\(\)', line):
errors.append(output_api.PresubmitError(
'%s:%d uses PassAs<T>(). Use Pass() instead.' %
(f.LocalPath(), line_number)))
return errors

def FindUnquotedQuote(contents, pos):
Expand Down
4 changes: 2 additions & 2 deletions net/socket/ssl_client_socket_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1822,7 +1822,7 @@ TEST_F(SSLClientSocketTest, Connect_WithZeroReturn) {

SynchronousErrorStreamSocket* raw_transport = transport.get();
scoped_ptr<SSLClientSocket> sock(
CreateSSLClientSocket(transport.PassAs<StreamSocket>(),
CreateSSLClientSocket(transport.Pass(),
test_server.host_port_pair(),
kDefaultSSLConfig));

Expand Down Expand Up @@ -1859,7 +1859,7 @@ TEST_F(SSLClientSocketTest, Read_WithZeroReturn) {

SynchronousErrorStreamSocket* raw_transport = transport.get();
scoped_ptr<SSLClientSocket> sock(
CreateSSLClientSocket(transport.PassAs<StreamSocket>(),
CreateSSLClientSocket(transport.Pass(),
test_server.host_port_pair(),
ssl_config));

Expand Down

0 comments on commit 19b6b65

Please sign in to comment.