location.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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/stringize_macros.h"
  14. #include "rtc_base/system/rtc_export.h"
  15. namespace rtc {
  16. // Location provides basic info where of an object was constructed, or was
  17. // significantly brought to life.
  18. // This is a stripped down version of:
  19. // https://code.google.com/p/chromium/codesearch#chromium/src/base/location.h
  20. class RTC_EXPORT Location {
  21. public:
  22. // Constructor should be called with a long-lived char*, such as __FILE__.
  23. // It assumes the provided value will persist as a global constant, and it
  24. // will not make a copy of it.
  25. Location(const char* function_name, const char* file_name, int line_number)
  26. : function_name_(function_name),
  27. file_name_(file_name),
  28. line_number_(line_number) {}
  29. Location() = default;
  30. const char* function_name() const { return function_name_; }
  31. const char* file_name() const { return file_name_; }
  32. int line_number() const { return line_number_; }
  33. // TODO(steveanton): Remove once all downstream users have been updated to use
  34. // |file_name()| and/or |line_number()|.
  35. const char* file_and_line() const { return file_name_; }
  36. std::string ToString() const;
  37. private:
  38. const char* function_name_ = "Unknown";
  39. const char* file_name_ = "Unknown";
  40. int line_number_ = -1;
  41. };
  42. // Define a macro to record the current source location.
  43. #define RTC_FROM_HERE RTC_FROM_HERE_WITH_FUNCTION(__FUNCTION__)
  44. #define RTC_FROM_HERE_WITH_FUNCTION(function_name) \
  45. ::rtc::Location(function_name, __FILE__, __LINE__)
  46. } // namespace rtc
  47. #endif // RTC_BASE_LOCATION_H_