location.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright 2016 The WebRTC Project Authors. All rights reserved.
  3. *
  4. * Use of this source code is governed by a BSD-style license
  5. * that can be found in the LICENSE file in the root of the source
  6. * tree. An additional intellectual property rights grant can be found
  7. * in the file PATENTS. All contributing project authors may
  8. * be found in the AUTHORS file in the root of the source tree.
  9. */
  10. #ifndef RTC_BASE_LOCATION_H_
  11. #define RTC_BASE_LOCATION_H_
  12. #include <string>
  13. #include "rtc_base/system/rtc_export.h"
  14. namespace rtc {
  15. // Location provides basic info where of an object was constructed, or was
  16. // significantly brought to life.
  17. // This is a stripped down version of:
  18. // https://code.google.com/p/chromium/codesearch#chromium/src/base/location.h
  19. class RTC_EXPORT Location {
  20. public:
  21. // Constructor should be called with a long-lived char*, such as __FILE__.
  22. // It assumes the provided value will persist as a global constant, and it
  23. // will not make a copy of it.
  24. Location(const char* function_name, const char* file_name, int line_number)
  25. : function_name_(function_name),
  26. file_name_(file_name),
  27. line_number_(line_number) {}
  28. Location() = default;
  29. const char* function_name() const { return function_name_; }
  30. const char* file_name() const { return file_name_; }
  31. int line_number() const { return line_number_; }
  32. // TODO(steveanton): Remove once all downstream users have been updated to use
  33. // |file_name()| and/or |line_number()|.
  34. const char* file_and_line() const { return file_name_; }
  35. std::string ToString() const;
  36. private:
  37. const char* function_name_ = "Unknown";
  38. const char* file_name_ = "Unknown";
  39. int line_number_ = -1;
  40. };
  41. // Define a macro to record the current source location.
  42. #define RTC_FROM_HERE RTC_FROM_HERE_WITH_FUNCTION(__FUNCTION__)
  43. #define RTC_FROM_HERE_WITH_FUNCTION(function_name) \
  44. ::rtc::Location(function_name, __FILE__, __LINE__)
  45. } // namespace rtc
  46. #endif // RTC_BASE_LOCATION_H_