You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

visible.h 2.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Copyright 2022 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef MINDSPORE_CCSRC_INCLUDE_COMMON_VISIBLE_H_
  17. #define MINDSPORE_CCSRC_INCLUDE_COMMON_VISIBLE_H_
  18. #include <utility>
  19. #if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__))
  20. #ifdef COMMON_DLL
  21. #define COMMON_EXPORT __declspec(dllexport)
  22. #else
  23. #define COMMON_EXPORT __declspec(dllimport)
  24. #endif
  25. #define COMMON_LOCAL
  26. #else
  27. #define COMMON_EXPORT __attribute__((visibility("default")))
  28. #define COMMON_LOCAL __attribute__((visibility("hidden")))
  29. #endif
  30. #define HANDLER_DEFINE(return_type, name, args...) \
  31. public: \
  32. template <typename... Args> \
  33. static return_type name(const Args &... argss) { \
  34. if (name##_handler_ == nullptr) { \
  35. return return_type(); \
  36. } \
  37. return name##_handler_(argss...); \
  38. } \
  39. using name##Handler = std::function<decltype(name<args>)>; \
  40. static void Set##name##Handler(name##Handler handler) { name##_handler_ = std::move(handler); } \
  41. \
  42. private: \
  43. inline static name##Handler name##_handler_;
  44. #endif // MINDSPORE_CCSRC_INCLUDE_COMMON_VISIBLE_H_