Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
dd63128f
Commit
dd63128f
authored
Mar 01, 2014
by
peastman
Browse files
Another attempt at dealing with the fact that some compilers define round() and others don't
parent
8381aaa8
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
10 deletions
+14
-10
platforms/reference/src/ReferenceTabulatedFunction.cpp
platforms/reference/src/ReferenceTabulatedFunction.cpp
+14
-10
No files found.
platforms/reference/src/ReferenceTabulatedFunction.cpp
View file @
dd63128f
...
@@ -33,16 +33,20 @@
...
@@ -33,16 +33,20 @@
#include "openmm/OpenMMException.h"
#include "openmm/OpenMMException.h"
#include "openmm/internal/SplineFitter.h"
#include "openmm/internal/SplineFitter.h"
using
namespace
OpenMM
;
#ifdef _MSC_VER
using
namespace
std
;
using
Lepton
::
CustomFunction
;
/**
/**
* We need to define this ourselves, since Visual Studio is missing round() from cmath.
* We need to define this ourselves, since Visual Studio is missing round() from cmath.
*/
*/
static
int
round
(
double
x
)
{
static
int
round
(
double
x
)
{
return
(
int
)
(
x
+
0.5
);
return
(
int
)
(
x
+
0.5
);
}
}
#else
#include <cmath>
#endif
using
namespace
OpenMM
;
using
namespace
std
;
using
Lepton
::
CustomFunction
;
extern
"C"
CustomFunction
*
createReferenceTabulatedFunction
(
const
TabulatedFunction
&
function
)
{
extern
"C"
CustomFunction
*
createReferenceTabulatedFunction
(
const
TabulatedFunction
&
function
)
{
if
(
dynamic_cast
<
const
Continuous1DFunction
*>
(
&
function
)
!=
NULL
)
if
(
dynamic_cast
<
const
Continuous1DFunction
*>
(
&
function
)
!=
NULL
)
...
@@ -201,7 +205,7 @@ int ReferenceDiscrete1DFunction::getNumArguments() const {
...
@@ -201,7 +205,7 @@ int ReferenceDiscrete1DFunction::getNumArguments() const {
}
}
double
ReferenceDiscrete1DFunction
::
evaluate
(
const
double
*
arguments
)
const
{
double
ReferenceDiscrete1DFunction
::
evaluate
(
const
double
*
arguments
)
const
{
int
i
=
round
(
arguments
[
0
]);
int
i
=
(
int
)
round
(
arguments
[
0
]);
if
(
i
<
0
||
i
>=
values
.
size
())
if
(
i
<
0
||
i
>=
values
.
size
())
throw
OpenMMException
(
"ReferenceDiscrete1DFunction: argument out of range"
);
throw
OpenMMException
(
"ReferenceDiscrete1DFunction: argument out of range"
);
return
values
[
i
];
return
values
[
i
];
...
@@ -224,8 +228,8 @@ int ReferenceDiscrete2DFunction::getNumArguments() const {
...
@@ -224,8 +228,8 @@ int ReferenceDiscrete2DFunction::getNumArguments() const {
}
}
double
ReferenceDiscrete2DFunction
::
evaluate
(
const
double
*
arguments
)
const
{
double
ReferenceDiscrete2DFunction
::
evaluate
(
const
double
*
arguments
)
const
{
int
i
=
round
(
arguments
[
0
]);
int
i
=
(
int
)
round
(
arguments
[
0
]);
int
j
=
round
(
arguments
[
1
]);
int
j
=
(
int
)
round
(
arguments
[
1
]);
if
(
i
<
0
||
i
>=
xsize
||
j
<
0
||
j
>=
ysize
)
if
(
i
<
0
||
i
>=
xsize
||
j
<
0
||
j
>=
ysize
)
throw
OpenMMException
(
"ReferenceDiscrete2DFunction: argument out of range"
);
throw
OpenMMException
(
"ReferenceDiscrete2DFunction: argument out of range"
);
return
values
[
i
+
j
*
xsize
];
return
values
[
i
+
j
*
xsize
];
...
@@ -248,9 +252,9 @@ int ReferenceDiscrete3DFunction::getNumArguments() const {
...
@@ -248,9 +252,9 @@ int ReferenceDiscrete3DFunction::getNumArguments() const {
}
}
double
ReferenceDiscrete3DFunction
::
evaluate
(
const
double
*
arguments
)
const
{
double
ReferenceDiscrete3DFunction
::
evaluate
(
const
double
*
arguments
)
const
{
int
i
=
round
(
arguments
[
0
]);
int
i
=
(
int
)
round
(
arguments
[
0
]);
int
j
=
round
(
arguments
[
1
]);
int
j
=
(
int
)
round
(
arguments
[
1
]);
int
k
=
round
(
arguments
[
2
]);
int
k
=
(
int
)
round
(
arguments
[
2
]);
if
(
i
<
0
||
i
>=
xsize
||
j
<
0
||
j
>=
ysize
||
k
<
0
||
k
>=
zsize
)
if
(
i
<
0
||
i
>=
xsize
||
j
<
0
||
j
>=
ysize
||
k
<
0
||
k
>=
zsize
)
throw
OpenMMException
(
"ReferenceDiscrete3DFunction: argument out of range"
);
throw
OpenMMException
(
"ReferenceDiscrete3DFunction: argument out of range"
);
return
values
[
i
+
(
j
+
k
*
ysize
)
*
xsize
];
return
values
[
i
+
(
j
+
k
*
ysize
)
*
xsize
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment