• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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