Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / base / bind_internal_win.h
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Specializations of RunnableAdapter<> for Windows specific calling
6 // conventions.  Please see base/bind_internal.h for more info.
7
8 #ifndef BASE_BIND_INTERNAL_WIN_H_
9 #define BASE_BIND_INTERNAL_WIN_H_
10
11 // In the x64 architecture in Windows, __fastcall, __stdcall, etc, are all
12 // the same as __cdecl which would turn the following specializations into
13 // multiple definitions.
14 #if !defined(ARCH_CPU_X86_64)
15
16 namespace base {
17 namespace internal {
18
19 template <typename Functor>
20 class RunnableAdapter;
21
22 // __stdcall Function.
23 template <typename R, typename... Args>
24 class RunnableAdapter<R(__stdcall *)(Args...)> {
25  public:
26   typedef R (RunType)(Args...);
27
28   explicit RunnableAdapter(R(__stdcall *function)(Args...))
29       : function_(function) {
30   }
31
32   R Run(typename CallbackParamTraits<Args>::ForwardType... args) {
33     return function_(args...);
34   }
35
36  private:
37   R (__stdcall *function_)(Args...);
38 };
39
40 // __fastcall Function.
41 template <typename R, typename... Args>
42 class RunnableAdapter<R(__fastcall *)(Args...)> {
43  public:
44   typedef R (RunType)(Args...);
45
46   explicit RunnableAdapter(R(__fastcall *function)(Args...))
47       : function_(function) {
48   }
49
50   R Run(typename CallbackParamTraits<Args>::ForwardType... args) {
51     return function_(args...);
52   }
53
54  private:
55   R (__fastcall *function_)(Args...);
56 };
57
58 }  // namespace internal
59 }  // namespace base
60
61 #endif  // !defined(ARCH_CPU_X86_64)
62
63 #endif  // BASE_BIND_INTERNAL_WIN_H_