summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/webrtc/base/latebindingsymboltable.h.def
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/webrtc/base/latebindingsymboltable.h.def')
-rw-r--r--chromium/third_party/webrtc/base/latebindingsymboltable.h.def83
1 files changed, 83 insertions, 0 deletions
diff --git a/chromium/third_party/webrtc/base/latebindingsymboltable.h.def b/chromium/third_party/webrtc/base/latebindingsymboltable.h.def
new file mode 100644
index 00000000000..39b515fbd1d
--- /dev/null
+++ b/chromium/third_party/webrtc/base/latebindingsymboltable.h.def
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2012 The WebRTC Project Authors. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+// This file is a supermacro
+// (see http://wanderinghorse.net/computing/papers/supermacros_cpp.html) to
+// expand a declaration of a late-binding symbol table class.
+//
+// Arguments:
+// LATE_BINDING_SYMBOL_TABLE_CLASS_NAME: Name of the class to generate.
+// LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST: List of symbols to load from the DLL,
+// as an X-Macro list (see http://www.drdobbs.com/blogs/cpp/228700289).
+//
+// From a .h file, include the header(s) for the DLL to late-bind and the
+// latebindingsymboltable.h header, and then call this supermacro (optionally
+// from inside the namespace for the class to generate, if any). Example:
+//
+// #include <headerfordll.h>
+//
+// #include "webrtc/base/latebindingsymboltable.h"
+//
+// namespace foo {
+//
+// #define MY_CLASS_NAME DesiredClassName
+// #define MY_SYMBOLS_LIST X(acos) X(sin) X(tan)
+//
+// #define LATE_BINDING_SYMBOL_TABLE_CLASS_NAME MY_CLASS_NAME
+// #define LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST MY_SYMBOLS_LIST
+// #include "webrtc/base/latebindingsymboltable.h.def"
+//
+// }
+
+#ifndef WEBRTC_BASE_LATEBINDINGSYMBOLTABLE_H_
+#error You must first include latebindingsymboltable.h
+#endif
+
+#ifndef LATE_BINDING_SYMBOL_TABLE_CLASS_NAME
+#error You must define LATE_BINDING_SYMBOL_TABLE_CLASS_NAME
+#endif
+
+#ifndef LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST
+#error You must define LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST
+#endif
+
+class LATE_BINDING_SYMBOL_TABLE_CLASS_NAME :
+ public ::rtc::LateBindingSymbolTable {
+ public:
+ LATE_BINDING_SYMBOL_TABLE_CLASS_NAME();
+ ~LATE_BINDING_SYMBOL_TABLE_CLASS_NAME();
+
+#define X(sym) \
+ typeof(&::sym) sym() const { \
+ ASSERT(::rtc::LateBindingSymbolTable::IsLoaded()); \
+ return reinterpret_cast<typeof(&::sym)>(table_[SYMBOL_TABLE_INDEX_##sym]); \
+ }
+LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST
+#undef X
+
+ private:
+ enum {
+#define X(sym) \
+ SYMBOL_TABLE_INDEX_##sym,
+LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST
+#undef X
+ SYMBOL_TABLE_SIZE
+ };
+
+ static const ::rtc::LateBindingSymbolTable::TableInfo kTableInfo;
+ static const char *const kSymbolNames[];
+
+ void *table_[SYMBOL_TABLE_SIZE];
+
+ DISALLOW_COPY_AND_ASSIGN(LATE_BINDING_SYMBOL_TABLE_CLASS_NAME);
+};
+
+#undef LATE_BINDING_SYMBOL_TABLE_CLASS_NAME
+#undef LATE_BINDING_SYMBOL_TABLE_SYMBOLS_LIST