+/*
+ * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#ifndef WM_UTIL_HPP
#define WM_UTIL_HPP
#include <functional>
-#include <sys/poll.h>
+#include <thread>
#include <vector>
+#include <sys/poll.h>
+
+extern "C" {
+#include <afb/afb-binding.h>
+};
+
+#define CONCAT_(X, Y) X##Y
+#define CONCAT(X, Y) CONCAT_(X, Y)
+
#ifdef __GNUC__
#define ATTR_FORMAT(stringindex, firsttocheck) \
__attribute__((format(printf, stringindex, firsttocheck)))
+#define ATTR_NORETURN __attribute__((noreturn))
#else
#define ATTR_FORMAT(stringindex, firsttocheck)
+#define ATTR_NORETURN
#endif
-void lognotice(char const *fmt, ...) ATTR_FORMAT(1, 2);
-void logerror(char const *fmt, ...) ATTR_FORMAT(1, 2);
-void fatal(char const *fmt, ...) ATTR_FORMAT(1, 2);
+#define lognotice(...) AFB_NOTICE(__VA_ARGS__)
+#define logerror(...) AFB_ERROR(__VA_ARGS__)
+#define fatal(...) \
+ do { \
+ AFB_ERROR(__VA_ARGS__); \
+ abort(); \
+ } while (0)
#ifdef DEBUG_OUTPUT
-void logdebug(char const *fmt, ...) ATTR_FORMAT(1, 2);
+#define logdebug(...) AFB_DEBUG(__VA_ARGS__)
#else
-static inline void logdebug(char const *fmt, ...) ATTR_FORMAT(1, 2);
-static inline void logdebug(char const *fmt, ...) {}
+#define logdebug(...)
+#endif
+
+#ifndef SCOPE_TRACING
+#define ST()
+#define STN(N)
+#else
+#define ST() \
+ ScopeTrace __attribute__((unused)) CONCAT(trace_scope_, __LINE__)(__func__)
+#define STN(N) \
+ ScopeTrace __attribute__((unused)) CONCAT(named_trace_scope_, __LINE__)(#N)
+
+struct ScopeTrace {
+ thread_local static int indent;
+ char const *f{};
+ explicit ScopeTrace(char const *func);
+ ~ScopeTrace();
+};
#endif
// _ _ _ __ _
}
};
-// _ _ ____ _ _
-// ___| |_ _ __ _ _ ___| |_ | _ \ ___ | | | ___ _ __
-// / __| __| '__| | | |/ __| __| | |_) / _ \| | |/ _ \ '__|
-// \__ \ |_| | | |_| | (__| |_ | __/ (_) | | | __/ |
-// |___/\__|_| \__,_|\___|\__| |_| \___/|_|_|\___|_|
-//
-struct Poller {
- std::vector<std::function<int(int)>> handlers;
- std::vector<struct pollfd> pfds;
-
- Poller() = default;
- void add_fd(int fd, std::function<int(int)> handler);
- int check_events();
-};
-
#endif // !WM_UTIL_HPP