1 |
|
2 |
/******************************************************* |
3 |
* |
4 |
* Copyright (c) 2003-2009 by University of Queensland |
5 |
* Earth Systems Science Computational Center (ESSCC) |
6 |
* http://www.uq.edu.au/esscc |
7 |
* |
8 |
* Primary Business: Queensland, Australia |
9 |
* Licensed under the Open Software License version 3.0 |
10 |
* http://www.opensource.org/licenses/osl-3.0.php |
11 |
* |
12 |
*******************************************************/ |
13 |
|
14 |
#ifndef escript_EscriptParams_H |
15 |
#define escript_EscriptParams_H |
16 |
#include "system_dep.h" |
17 |
#include <boost/python/list.hpp> |
18 |
#include "Data.h" // for the operators |
19 |
|
20 |
namespace escript |
21 |
{ |
22 |
|
23 |
class Data; |
24 |
class DataLazy; |
25 |
|
26 |
class EscriptParams |
27 |
{ |
28 |
public: |
29 |
ESCRIPT_DLL_API |
30 |
EscriptParams(); |
31 |
|
32 |
ESCRIPT_DLL_API |
33 |
int getInt(const char* name, int sentinel=0) const; |
34 |
|
35 |
ESCRIPT_DLL_API |
36 |
void setInt(const char* name, int value); |
37 |
|
38 |
boost::python::list |
39 |
listEscriptParams(); |
40 |
|
41 |
private: |
42 |
|
43 |
// If we get more params we can replace this with a map |
44 |
int too_many_lines; |
45 |
int autolazy; |
46 |
int too_many_levels; |
47 |
int too_many_nodes; |
48 |
int resolve_collective; |
49 |
int print_lazy_tree; |
50 |
|
51 |
protected: |
52 |
// This is to provide fast access for methods in Data. |
53 |
// Its a little bit ugly, needing all those friends but I really want to |
54 |
// limit outside access to the char* interface |
55 |
|
56 |
int getTOO_MANY_LINES() {return too_many_lines;} |
57 |
int getAUTOLAZY() { return autolazy;} |
58 |
int getTOO_MANY_LEVELS() {return too_many_levels;} |
59 |
int getTOO_MANY_NODES() {return too_many_nodes;} |
60 |
int getRESOLVE_COLLECTIVE() {return resolve_collective;} |
61 |
int getPRINT_LAZY_TREE() {return print_lazy_tree;} |
62 |
|
63 |
friend class escript::Data; |
64 |
friend class escript::DataLazy; |
65 |
friend Data operator+(const boost::python::api::object&, const escript::Data&); |
66 |
friend Data operator-(const boost::python::api::object&, const escript::Data&); |
67 |
friend Data operator*(const boost::python::api::object&, const escript::Data&); |
68 |
friend Data operator/(const boost::python::api::object&, const escript::Data&); |
69 |
friend Data operator+(const escript::Data&, const escript::Data&); |
70 |
friend Data operator-(const escript::Data&, const escript::Data&); |
71 |
friend Data operator*(const escript::Data&, const escript::Data&); |
72 |
friend Data operator/(const escript::Data&, const escript::Data&); |
73 |
friend Data operator+(const escript::Data&, const boost::python::api::object&); |
74 |
friend Data operator-(const escript::Data&, const boost::python::api::object&); |
75 |
friend Data operator*(const escript::Data&, const boost::python::api::object&); |
76 |
friend Data operator/(const escript::Data&, const boost::python::api::object&); |
77 |
friend Data C_GeneralTensorProduct(escript::Data& arg_0, escript::Data& arg_1, |
78 |
int axis_offset, int transpose); |
79 |
}; |
80 |
|
81 |
|
82 |
extern EscriptParams escriptParams; |
83 |
|
84 |
/** |
85 |
\brief Set the value of a named parameter. |
86 |
See listEscriptParams() (showEscriptParams() in python) for available parameters. |
87 |
*/ |
88 |
ESCRIPT_DLL_API |
89 |
void setEscriptParamInt(const char* name, int value); |
90 |
|
91 |
/** |
92 |
\brief get the value of a named parameter. |
93 |
See listEscriptParams() (showEscriptParams() in python) for available parameters. |
94 |
*/ |
95 |
ESCRIPT_DLL_API |
96 |
int getEscriptParamInt(const char* name, int sentinel=0); |
97 |
|
98 |
/** |
99 |
\brief describe available paramters. |
100 |
\return a list of tuples (parameter name, value, description) |
101 |
*/ |
102 |
ESCRIPT_DLL_API |
103 |
inline boost::python::list listEscriptParams() |
104 |
{ |
105 |
return escriptParams.listEscriptParams(); |
106 |
} |
107 |
|
108 |
|
109 |
|
110 |
} |
111 |
#endif |