1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/*
* This file is part of the Shiboken Python Binding Generator project.
*
* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
*
* Contact: PySide team <contact@pyside.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* version 2.1 as published by the Free Software Foundation. Please
* review the following information to ensure the GNU Lesser General
* Public License version 2.1 requirements will be met:
* http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
*
* As a special exception to the GNU Lesser General Public License
* version 2.1, the object code form of a "work that uses the Library"
* may incorporate material from a header file that is part of the
* Library. You may distribute such object code under terms of your
* choice, provided that the incorporated material (i) does not exceed
* more than 5% of the total size of the Library; and (ii) is limited to
* numerical parameters, data structure layouts, accessors, macros,
* inline functions and templates.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef MODIFICATIONS_H
#define MODIFICATIONS_H
#include "libsamplemacros.h"
#include <utility>
#include "point.h"
class LIBSAMPLE_API Modifications
{
public:
Modifications() {}
~Modifications() {}
enum OverloadedModFunc {
OverloadedNone,
Overloaded_ibid,
Overloaded_ibib,
Overloaded_ibiP,
Overloaded_ibii,
Overloaded_ibPP
};
// those overloaded methods should be heavily modified
// to push the overload decisor to its limits
OverloadedModFunc overloaded(int a0, bool b0, int c0, double d0) { return Overloaded_ibid; }
OverloadedModFunc overloaded(int a1, bool b1, int c1, bool d1) { return Overloaded_ibib; }
OverloadedModFunc overloaded(int a2, bool b2, int c2, Point d2) { return Overloaded_ibiP; }
OverloadedModFunc overloaded(int a3, bool b3, int c3 = 123, int d3 = 456) { return Overloaded_ibii; }
OverloadedModFunc overloaded(int a4, bool b4, Point c4, Point d4) { return Overloaded_ibPP; }
void argRemoval0(int a0, bool a1, int a2 = 123, int a3 = 456) {}
void argRemoval0(int a0, bool a1, int a2, bool a3) {}
void argRemoval1(int a0, bool a1, Point a2 = Point(1, 2), Point a3 = Point(3, 4), int a4 = 333) {}
void argRemoval1(int a0, bool a1, int a2, bool a3) {}
void argRemoval2(int a0, bool a1, Point a2 = Point(1, 2), Point a3 = Point(3, 4), int a4 = 333) {}
void argRemoval3(int a0, Point a1 = Point(1, 2), bool a2 = true, Point a3 = Point(3, 4), int a4 = 333) {}
void argRemoval4(int a0, Point a1, bool a2, Point a3 = Point(3, 4), int a4 = 333) {}
void argRemoval5(int a0, bool a1, Point a2 = Point(1, 2), Point a3 = Point(3, 4), int a4 = 333) {}
void argRemoval5(int a0, bool a1, int a2, bool a3) {}
// 'ok' must be removed and the return value will be changed
// to a tuple (PyObject*) containing the expected result plus
// the 'ok' value as a Python boolean
std::pair<double, double> pointToPair(Point pt, bool* ok);
// same as 'pointToPair' except that this time 'ok' is the first argument
double multiplyPointCoordsPlusValue(bool* ok, Point pt, double value);
// completely remove 'plus' from the Python side
int doublePlus(int value, int plus = 0);
// the default value for both arguments must be changed in Python
int power(int base = 1, int exponent = 0);
// in Python set argument default value to 10
int timesTen(int number);
// in Python remove the argument default value
int increment(int number = 0);
// don't export this method to Python
void exclusiveCppStuff();
// change the name of this regular method
int cppMultiply(int a, int b);
// change the name of this virtual method
virtual const char* className();
};
class LIBSAMPLE_API AbstractModifications : public Modifications
{
public:
AbstractModifications() {}
~AbstractModifications() {}
bool invert(bool value) { return !value; }
// completely remove this method in Python
virtual void pointlessPureVirtualMethod() = 0;
};
#endif // MODIFICATIONS_H
|