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