Skip to content

Commit 6fad1fa

Browse files
committed
logging: Remove std::string from internal API
The internal logging API is used by the CUDA processor. For CUDA 6.5 and -DENABLE_CXX11=ON, the cuda object is compiled with C++98 and other objects with C++11. Thus remove std::string for being incompatible ABI across C++98 and C++11.
1 parent c6fe725 commit 6fad1fa

2 files changed

Lines changed: 26 additions & 21 deletions

File tree

include/internal/libfreenect2/logging.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,24 +57,23 @@ class LogMessage
5757
std::ostringstream stream_;
5858
public:
5959
LogMessage(Logger *logger, Logger::Level level);
60+
LogMessage(Logger *logger, Logger::Level level, const char *source);
6061
~LogMessage();
6162

6263
std::ostream &stream();
6364
};
6465

65-
std::string getShortName(const char *func);
66-
6766
} /* namespace libfreenect2 */
6867

6968
#if defined(__GNUC__) || defined(__clang__)
70-
#define LOG_SOURCE ::libfreenect2::getShortName(__PRETTY_FUNCTION__)
69+
#define LOG_SOURCE __PRETTY_FUNCTION__
7170
#elif defined(_MSC_VER)
72-
#define LOG_SOURCE ::libfreenect2::getShortName(__FUNCSIG__)
71+
#define LOG_SOURCE __FUNCSIG__
7372
#else
7473
#define LOG_SOURCE ""
7574
#endif
7675

77-
#define LOG(LEVEL) (::libfreenect2::LogMessage(::libfreenect2::getGlobalLogger(), ::libfreenect2::Logger::LEVEL).stream() << "[" << LOG_SOURCE << "] ")
76+
#define LOG(LEVEL) (::libfreenect2::LogMessage(::libfreenect2::getGlobalLogger(), ::libfreenect2::Logger::LEVEL, LOG_SOURCE).stream())
7877
#define LOG_DEBUG LOG(Debug)
7978
#define LOG_INFO LOG(Info)
8079
#define LOG_WARNING LOG(Warning)

src/logging.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,28 @@ LogMessage::LogMessage(Logger *logger, Logger::Level level) : logger_(logger), l
131131

132132
}
133133

134+
std::string getShortName(const char *func)
135+
{
136+
std::string src(func);
137+
size_t end = src.rfind('(');
138+
if (end == std::string::npos)
139+
end = src.size();
140+
size_t begin = 1 + src.rfind(' ', end);
141+
size_t first_ns = src.find("::", begin);
142+
if (first_ns != std::string::npos)
143+
begin = first_ns + 2;
144+
size_t last_ns = src.rfind("::", end);
145+
if (last_ns != std::string::npos)
146+
end = last_ns;
147+
return src.substr(begin, end - begin);
148+
}
149+
150+
LogMessage::LogMessage(Logger *logger, Logger::Level level, const char *source):
151+
logger_(logger), level_(level)
152+
{
153+
stream_ << "[" << getShortName(source) << "] ";
154+
}
155+
134156
LogMessage::~LogMessage()
135157
{
136158
if(logger_ != 0 && stream_.good())
@@ -254,20 +276,4 @@ std::ostream &WithPerfLogging::stopTiming(std::ostream &stream)
254276
return impl_->stop(stream);
255277
}
256278

257-
std::string getShortName(const char *func)
258-
{
259-
std::string src(func);
260-
size_t end = src.rfind('(');
261-
if (end == std::string::npos)
262-
end = src.size();
263-
size_t begin = 1 + src.rfind(' ', end);
264-
size_t first_ns = src.find("::", begin);
265-
if (first_ns != std::string::npos)
266-
begin = first_ns + 2;
267-
size_t last_ns = src.rfind("::", end);
268-
if (last_ns != std::string::npos)
269-
end = last_ns;
270-
return src.substr(begin, end - begin);
271-
}
272-
273279
} /* namespace libfreenect2 */

0 commit comments

Comments
 (0)