Remove dynamic_cast

changes/52/217552/1
Craig Tiller 10 years ago
parent 42bc87c097
commit ad9d0c472d
  1. 8
      include/grpc++/credentials.h
  2. 2
      src/cpp/client/insecure_credentials.cc
  3. 10
      src/cpp/client/secure_credentials.cc

@ -42,11 +42,19 @@
namespace grpc { namespace grpc {
class ChannelArguments; class ChannelArguments;
class ChannelInterface; class ChannelInterface;
class SecureCredentials;
class Credentials { class Credentials {
public: public:
virtual ~Credentials(); virtual ~Credentials();
protected:
friend std::unique_ptr<Credentials> ComposeCredentials(
const std::unique_ptr<Credentials>& creds1,
const std::unique_ptr<Credentials>& creds2);
virtual SecureCredentials* AsSecureCredentials() = 0;
private: private:
friend std::shared_ptr<ChannelInterface> CreateChannel( friend std::shared_ptr<ChannelInterface> CreateChannel(
const grpc::string& target, const std::unique_ptr<Credentials>& creds, const grpc::string& target, const std::unique_ptr<Credentials>& creds,

@ -50,6 +50,8 @@ class InsecureCredentialsImpl final : public Credentials {
args.SetChannelArgs(&channel_args); args.SetChannelArgs(&channel_args);
return std::shared_ptr<ChannelInterface>(new Channel(target, grpc_channel_create(target.c_str(), &channel_args))); return std::shared_ptr<ChannelInterface>(new Channel(target, grpc_channel_create(target.c_str(), &channel_args)));
} }
SecureCredentials* AsSecureCredentials() { return nullptr; }
}; };
} // namespace } // namespace

@ -42,7 +42,6 @@
namespace grpc { namespace grpc {
namespace {
class SecureCredentials final : public Credentials { class SecureCredentials final : public Credentials {
public: public:
explicit SecureCredentials(grpc_credentials* c_creds) : c_creds_(c_creds) {} explicit SecureCredentials(grpc_credentials* c_creds) : c_creds_(c_creds) {}
@ -58,10 +57,15 @@ class SecureCredentials final : public Credentials {
grpc_secure_channel_create(c_creds_, target.c_str(), &channel_args))); grpc_secure_channel_create(c_creds_, target.c_str(), &channel_args)));
} }
SecureCredentials* AsSecureCredentials() {
return this;
}
private: private:
grpc_credentials* const c_creds_; grpc_credentials* const c_creds_;
}; };
namespace {
std::unique_ptr<Credentials> WrapCredentials(grpc_credentials* creds) { std::unique_ptr<Credentials> WrapCredentials(grpc_credentials* creds) {
return creds == nullptr return creds == nullptr
? nullptr ? nullptr
@ -116,8 +120,8 @@ std::unique_ptr<Credentials> ComposeCredentials(
// passed in here. This is OK because the underlying C objects (i.e., // passed in here. This is OK because the underlying C objects (i.e.,
// creds1 and creds2) into grpc_composite_credentials_create will see their // creds1 and creds2) into grpc_composite_credentials_create will see their
// refcounts incremented. // refcounts incremented.
SecureCredentials* s1 = dynamic_cast<SecureCredentials*>(creds1.get()); SecureCredentials* s1 = creds1->AsSecureCredentials();
SecureCredentials* s2 = dynamic_cast<SecureCredentials*>(creds2.get()); SecureCredentials* s2 = creds2->AsSecureCredentials();
if (s1 && s2) { if (s1 && s2) {
return WrapCredentials(grpc_composite_credentials_create( return WrapCredentials(grpc_composite_credentials_create(
s1->GetRawCreds(), s2->GetRawCreds())); s1->GetRawCreds(), s2->GetRawCreds()));

Loading…
Cancel
Save