/*
 * Copyright (C) 2018 Open Source Robotics Foundation
 *
 * 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.
 *
*/

#include <gz/plugin/EnablePluginFromThis.hh>
#include <gz/plugin/WeakPluginPtr.hh>

namespace gz
{
  namespace plugin
  {
    class EnablePluginFromThis::Implementation
    {
      public: WeakPluginPtr weak;
    };

    EnablePluginFromThis::EnablePluginFromThis()
      : pimpl(new Implementation())
    {
      // Do nothing
    }

    PluginPtr EnablePluginFromThis::PluginFromThis()
    {
      return this->pimpl->weak.Lock();
    }

    ConstPluginPtr EnablePluginFromThis::PluginFromThis() const
    {
      return this->pimpl->weak.Lock();
    }

    EnablePluginFromThis::~EnablePluginFromThis()
    {
      // Do nothing
    }

    std::shared_ptr<void>
    EnablePluginFromThis::PluginInstancePtrFromThis() const
    {
      return this->pimpl->weak.Lock()->PrivateGetInstancePtr();
    }

    void EnablePluginFromThis::PrivateSetPluginFromThis(const PluginPtr &_ptr)
    {
      this->pimpl->weak = _ptr;
    }
  }
}
