summaryrefslogtreecommitdiffstats
path: root/base/callback.h.pump
diff options
context:
space:
mode:
authorajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-19 00:52:15 +0000
committerajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-19 00:52:15 +0000
commit4346ef91c5d16fd98da3dad5356b0f994f225ce6 (patch)
tree2f0d0bcdb836a1f0d052ae901b9bfc69a44ed6b1 /base/callback.h.pump
parentc034941e26f9e62e7f5c9b58cd7a3f52bac1b1db (diff)
downloadchromium_src-4346ef91c5d16fd98da3dad5356b0f994f225ce6.zip
chromium_src-4346ef91c5d16fd98da3dad5356b0f994f225ce6.tar.gz
chromium_src-4346ef91c5d16fd98da3dad5356b0f994f225ce6.tar.bz2
Callbacks: Replumb the type-inference.
In preparation for attempting to support __stdcall, __fastcall, etc., break apart the templates so that instead of having one set of InvokerNs per type of function pointer, only have one per syntactic method of invocation. This lets the number of template specializations scale better. Previously, for each type of function pointer, we needed sum(1...arity) InvokerN specializations. There were 3 types (function, method, const method). The Windows calling conventions would have added another 2. in this method, we have 2 sets of InvokerN templates, and 1 set of FunctionTraits templates for each type. We only need (arity) number of FunctionTraits templates, so this is a net win. For our 6-arity system, it should go from 5 types * (1+2+3+4+5+6) InvokerNs = 105 specializations to 5 types * 6 FunctionTraits + 2 calling_syntaxes * (1+2+3+4+5+6) InvokerNs = 72 specializations This puts a bit more work on the compiler, but...hey, better it than the reader of the code. BUG=35223 TEST=none Review URL: http://codereview.chromium.org/6538045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75482 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/callback.h.pump')
-rw-r--r--base/callback.h.pump3
1 files changed, 2 insertions, 1 deletions
diff --git a/base/callback.h.pump b/base/callback.h.pump
index 2efe0c5..34b0eb0 100644
--- a/base/callback.h.pump
+++ b/base/callback.h.pump
@@ -226,6 +226,7 @@ namespace base {
template <typename Sig>
class Callback;
+
$range ARITY 0..MAX_ARITY
$for ARITY [[
$range ARG 1..ARITY
@@ -256,7 +257,7 @@ $for ARG ,
template <typename T>
Callback(const internal::InvokerStorageHolder<T>& invoker_holder)
: CallbackBase(
- reinterpret_cast<InvokeFuncStorage>(&T::FunctionTraits::DoInvoke),
+ reinterpret_cast<InvokeFuncStorage>(&T::Invoker::DoInvoke),
&invoker_holder.invoker_storage_) {
}