/*
 *
 * Copyright 2017 gRPC authors.
 *
 * 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.
 *
 */

#ifndef GRPC_CORE_LIB_GPRPP_ABSTRACT_H
#define GRPC_CORE_LIB_GPRPP_ABSTRACT_H

// This is needed to support abstract base classes in the c core. Since gRPC
// doesn't have a c++ runtime, it will hit a linker error on delete unless
// we define a virtual operator delete. See this blog for more info:
// https://eli.thegreenplace.net/2015/c-deleting-destructors-and-virtual-operator-delete/
#define GRPC_ABSTRACT_BASE_CLASS \
  static void operator delete(void* p) { abort(); }

// gRPC currently can't depend on libstdc++, so we can't use "= 0" for
// pure virtual methods.  Instead, we use this macro.
#define GRPC_ABSTRACT                                                        \
  {                                                                          \
    gpr_log(GPR_ERROR, "Function marked GRPC_ABSTRACT was not implemented"); \
    GPR_ASSERT(false);                                                       \
  }

#endif /* GRPC_CORE_LIB_GPRPP_ABSTRACT_H */
