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
ae051ee6
Commit
ae051ee6
authored
Jul 23, 2009
by
Peter Eastman
Browse files
Fixed some bugs in the Fortran wrappers
parent
6681292d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
24 deletions
+68
-24
wrappers/FortranWrapper_Header.xslt
wrappers/FortranWrapper_Header.xslt
+5
-5
wrappers/FortranWrapper_Source.xslt
wrappers/FortranWrapper_Source.xslt
+63
-19
No files found.
wrappers/FortranWrapper_Header.xslt
View file @
ae051ee6
...
@@ -88,12 +88,12 @@ MODULE OpenMM
...
@@ -88,12 +88,12 @@ MODULE OpenMM
subroutine OpenMM_Vec3_scale(vec, scale, result)
subroutine OpenMM_Vec3_scale(vec, scale, result)
use OpenMM_Types; implicit none
use OpenMM_Types; implicit none
real*8 vec(3)
real*8 vec(3)
real scale
real
*8
scale
real*8 result(3)
real*8 result(3)
end
end
! OpenMM_Vec3Array
! OpenMM_Vec3Array
subroutine OpenMM_Vec3Array_create(
size,
result)
subroutine OpenMM_Vec3Array_create(result
, size
)
use OpenMM_Types; implicit none
use OpenMM_Types; implicit none
integer*4 size
integer*4 size
type (OpenMM_Vec3Array) result
type (OpenMM_Vec3Array) result
...
@@ -131,7 +131,7 @@ MODULE OpenMM
...
@@ -131,7 +131,7 @@ MODULE OpenMM
end
end
! OpenMM_StringArray
! OpenMM_StringArray
subroutine OpenMM_StringArray_create(
size,
result)
subroutine OpenMM_StringArray_create(result
, size
)
use OpenMM_Types; implicit none
use OpenMM_Types; implicit none
integer*4 size
integer*4 size
type (OpenMM_StringArray) result
type (OpenMM_StringArray) result
...
@@ -169,7 +169,7 @@ MODULE OpenMM
...
@@ -169,7 +169,7 @@ MODULE OpenMM
end
end
! OpenMM_BondArray
! OpenMM_BondArray
subroutine OpenMM_BondArray_create(
size,
result)
subroutine OpenMM_BondArray_create(result
, size
)
use OpenMM_Types; implicit none
use OpenMM_Types; implicit none
integer*4 size
integer*4 size
type (OpenMM_BondArray) result
type (OpenMM_BondArray) result
...
@@ -268,7 +268,7 @@ END MODULE OpenMM
...
@@ -268,7 +268,7 @@ END MODULE OpenMM
<xsl:template
name=
"enumeration"
>
<xsl:template
name=
"enumeration"
>
<xsl:param
name=
"class_name"
/>
<xsl:param
name=
"class_name"
/>
<xsl:for-each
select=
"EnumValue"
>
<xsl:for-each
select=
"EnumValue"
>
real*8
OpenMM_
<xsl:value-of
select=
"concat($class_name, '_', @name)"
/>
integer*4
OpenMM_
<xsl:value-of
select=
"concat($class_name, '_', @name)"
/>
</xsl:for-each>
</xsl:for-each>
<xsl:for-each
select=
"EnumValue"
>
<xsl:for-each
select=
"EnumValue"
>
parameter(OpenMM_
<xsl:value-of
select=
"concat($class_name, '_', @name, '=', @init, ')')"
/>
parameter(OpenMM_
<xsl:value-of
select=
"concat($class_name, '_', @name, '=', @init, ')')"
/>
...
...
wrappers/FortranWrapper_Source.xslt
View file @
ae051ee6
...
@@ -43,9 +43,7 @@
...
@@ -43,9 +43,7 @@
using namespace OpenMM;
using namespace OpenMM;
using namespace std;
using namespace std;
#if defined(__cplusplus)
extern "C" {
extern "C" {
#endif
/* OpenMM_Vec3 */
/* OpenMM_Vec3 */
void openmm_vec3_scale_(const OpenMM_Vec3
&
vec, double const
&
scale, OpenMM_Vec3
&
result) {
void openmm_vec3_scale_(const OpenMM_Vec3
&
vec, double const
&
scale, OpenMM_Vec3
&
result) {
...
@@ -56,10 +54,10 @@ void OPENMM_VEC3_SCALE(const OpenMM_Vec3& vec, double const& scale, Open
...
@@ -56,10 +54,10 @@ void OPENMM_VEC3_SCALE(const OpenMM_Vec3& vec, double const& scale, Open
}
}
/* OpenMM_Vec3Array */
/* OpenMM_Vec3Array */
void openmm_vec3array_create_(
const int
&
size,
OpenMM_Vec3Array*
&
result) {
void openmm_vec3array_create_(OpenMM_Vec3Array*
&
result
, const int
&
size
) {
result = OpenMM_Vec3Array_create(size);
result = OpenMM_Vec3Array_create(size);
}
}
void OPENMM_VEC3ARRAY_CREATE(
const int
&
size,
OpenMM_Vec3Array*
&
result) {
void OPENMM_VEC3ARRAY_CREATE(OpenMM_Vec3Array*
&
result
, const int
&
size
) {
result = OpenMM_Vec3Array_create(size);
result = OpenMM_Vec3Array_create(size);
}
}
void openmm_vec3array_destroy_(OpenMM_Vec3Array*
&
array) {
void openmm_vec3array_destroy_(OpenMM_Vec3Array*
&
array) {
...
@@ -94,18 +92,26 @@ void openmm_vec3array_set_(OpenMM_Vec3Array* const& array, const int& in
...
@@ -94,18 +92,26 @@ void openmm_vec3array_set_(OpenMM_Vec3Array* const& array, const int& in
void OPENMM_VEC3ARRAY_SET(OpenMM_Vec3Array* const
&
array, const int
&
index, const OpenMM_Vec3
&
vec) {
void OPENMM_VEC3ARRAY_SET(OpenMM_Vec3Array* const
&
array, const int
&
index, const OpenMM_Vec3
&
vec) {
OpenMM_Vec3Array_set(array, index-1, vec);
OpenMM_Vec3Array_set(array, index-1, vec);
}
}
void openmm_vec3array_get_(const OpenMM_Vec3Array* const
&
array, const int
&
index,
const
OpenMM_Vec3
*
&
result) {
void openmm_vec3array_get_(const OpenMM_Vec3Array* const
&
array, const int
&
index, OpenMM_Vec3
&
result) {
result = OpenMM_Vec3Array_get(array, index-1);
result =
*
OpenMM_Vec3Array_get(array, index-1);
}
}
void OPENMM_VEC3ARRAY_GET(const OpenMM_Vec3Array* const
&
array, const int
&
index,
const
OpenMM_Vec3
*
&
result) {
void OPENMM_VEC3ARRAY_GET(const OpenMM_Vec3Array* const
&
array, const int
&
index, OpenMM_Vec3
&
result) {
result = OpenMM_Vec3Array_get(array, index-1);
result =
*
OpenMM_Vec3Array_get(array, index-1);
}
}
/* OpenMM_StringArray */
/* OpenMM_StringArray */
void openmm_stringarray_create_(const int
&
size, OpenMM_StringArray*
&
result) {
void copyAndPadString(char* dest, const char* source, int length) {
bool reachedEnd = false;
for (int i = 0; i
<
length; i++) {
if (source[i] == 0)
reachedEnd = true;
dest[i] = (reachedEnd ? ' ' : source[i]);
}
}
void openmm_stringarray_create_(OpenMM_StringArray*
&
result, const int
&
size) {
result = OpenMM_StringArray_create(size);
result = OpenMM_StringArray_create(size);
}
}
void OPENMM_STRINGARRAY_CREATE(
const int
&
size,
OpenMM_StringArray*
&
result) {
void OPENMM_STRINGARRAY_CREATE(OpenMM_StringArray*
&
result
, const int
&
size
) {
result = OpenMM_StringArray_create(size);
result = OpenMM_StringArray_create(size);
}
}
void openmm_stringarray_destroy_(OpenMM_StringArray*
&
array) {
void openmm_stringarray_destroy_(OpenMM_StringArray*
&
array) {
...
@@ -142,18 +148,18 @@ void OPENMM_STRINGARRAY_SET(OpenMM_StringArray* const& array, const int&
...
@@ -142,18 +148,18 @@ void OPENMM_STRINGARRAY_SET(OpenMM_StringArray* const& array, const int&
}
}
void openmm_stringarray_get_(const OpenMM_StringArray* const
&
array, const int
&
index, char* result, int length) {
void openmm_stringarray_get_(const OpenMM_StringArray* const
&
array, const int
&
index, char* result, int length) {
const char* str = OpenMM_StringArray_get(array, index-1);
const char* str = OpenMM_StringArray_get(array, index-1);
strncpy
(result, str, length);
copyAndPadString
(result, str, length);
}
}
void OPENMM_STRINGARRAY_GET(const OpenMM_StringArray* const
&
array, const int
&
index, char* result, int length) {
void OPENMM_STRINGARRAY_GET(const OpenMM_StringArray* const
&
array, const int
&
index, char* result, int length) {
const char* str = OpenMM_StringArray_get(array, index-1);
const char* str = OpenMM_StringArray_get(array, index-1);
strncpy
(result, str, length);
copyAndPadString
(result, str, length);
}
}
/* OpenMM_BondArray */
/* OpenMM_BondArray */
void openmm_bondarray_create_(
const int
&
size,
OpenMM_BondArray*
&
result) {
void openmm_bondarray_create_(OpenMM_BondArray*
&
result
, const int
&
size
) {
result = OpenMM_BondArray_create(size);
result = OpenMM_BondArray_create(size);
}
}
void OPENMM_BONDARRAY_CREATE(
const int
&
size,
OpenMM_BondArray*
&
result) {
void OPENMM_BONDARRAY_CREATE(OpenMM_BondArray*
&
result
, const int
&
size
) {
result = OpenMM_BondArray_create(size);
result = OpenMM_BondArray_create(size);
}
}
void openmm_bondarray_destroy_(OpenMM_BondArray*
&
array) {
void openmm_bondarray_destroy_(OpenMM_BondArray*
&
array) {
...
@@ -229,9 +235,7 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
...
@@ -229,9 +235,7 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
<xsl:call-template
name=
"class"
/>
<xsl:call-template
name=
"class"
/>
</xsl:for-each>
</xsl:for-each>
#if defined(__cplusplus)
}
}
#endif
</xsl:template>
</xsl:template>
<!-- Print out information for a class -->
<!-- Print out information for a class -->
...
@@ -298,6 +302,15 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
...
@@ -298,6 +302,15 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
<xsl:for-each
select=
"Argument"
>
<xsl:for-each
select=
"Argument"
>
<xsl:value-of
select=
"', '"
/>
<xsl:value-of
select=
"', '"
/>
<xsl:call-template
name=
"wrap_type"
><xsl:with-param
name=
"type_id"
select=
"@type"
/></xsl:call-template>
<xsl:call-template
name=
"wrap_type"
><xsl:with-param
name=
"type_id"
select=
"@type"
/></xsl:call-template>
<xsl:variable
name=
"is_handle"
>
<xsl:call-template
name=
"is_handle_type"
>
<xsl:with-param
name=
"type_id"
select=
"@type"
/>
</xsl:call-template>
</xsl:variable>
<xsl:if
test=
"string-length($is_handle)>0"
>
&
</xsl:if>
<xsl:variable
name=
"type_id"
select=
"@type"
/>
<xsl:variable
name=
"type_node"
select=
"/GCC_XML/*[@id=$type_id]"
/>
<xsl:if
test=
"not(local-name($type_node)='ReferenceType' or local-name($type_node)='PointerType')"
>
const
&
</xsl:if>
<xsl:value-of
select=
"concat(' ', @name)"
/>
<xsl:value-of
select=
"concat(' ', @name)"
/>
</xsl:for-each>
</xsl:for-each>
<!-- If any argument is a string, include a length argument -->
<!-- If any argument is a string, include a length argument -->
...
@@ -359,6 +372,12 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
...
@@ -359,6 +372,12 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
<xsl:for-each
select=
"Argument"
>
<xsl:for-each
select=
"Argument"
>
<xsl:if
test=
"position() > 1 or not($method/@static='1')"
>
,
</xsl:if>
<xsl:if
test=
"position() > 1 or not($method/@static='1')"
>
,
</xsl:if>
<xsl:call-template
name=
"wrap_type"
><xsl:with-param
name=
"type_id"
select=
"@type"
/></xsl:call-template>
<xsl:call-template
name=
"wrap_type"
><xsl:with-param
name=
"type_id"
select=
"@type"
/></xsl:call-template>
<xsl:variable
name=
"is_handle"
>
<xsl:call-template
name=
"is_handle_type"
>
<xsl:with-param
name=
"type_id"
select=
"@type"
/>
</xsl:call-template>
</xsl:variable>
<xsl:if
test=
"string-length($is_handle)>0"
>
&
</xsl:if>
<xsl:variable
name=
"type_id"
select=
"@type"
/>
<xsl:variable
name=
"type_id"
select=
"@type"
/>
<xsl:variable
name=
"type_node"
select=
"/GCC_XML/*[@id=$type_id]"
/>
<xsl:variable
name=
"type_node"
select=
"/GCC_XML/*[@id=$type_id]"
/>
<xsl:if
test=
"not(local-name($type_node)='ReferenceType' or local-name($type_node)='PointerType')"
>
const
&
</xsl:if>
<xsl:if
test=
"not(local-name($type_node)='ReferenceType' or local-name($type_node)='PointerType')"
>
const
&
</xsl:if>
...
@@ -372,9 +391,10 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
...
@@ -372,9 +391,10 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
</xsl:when>
</xsl:when>
<xsl:otherwise>
<xsl:otherwise>
<xsl:call-template
name=
"wrap_type"
><xsl:with-param
name=
"type_id"
select=
"@returns"
/></xsl:call-template>
<xsl:call-template
name=
"wrap_type"
><xsl:with-param
name=
"type_id"
select=
"@returns"
/></xsl:call-template>
<xsl:value-of
select=
"'&'"
/>
</xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:choose>
<xsl:value-of
select=
"'
&
result'"
/>
<xsl:value-of
select=
"' result'"
/>
</xsl:if>
</xsl:if>
<!-- If any argument is a string, include a length argument -->
<!-- If any argument is a string, include a length argument -->
<xsl:for-each
select=
"Argument"
>
<xsl:for-each
select=
"Argument"
>
...
@@ -419,8 +439,7 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
...
@@ -419,8 +439,7 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
</xsl:for-each>
</xsl:for-each>
<xsl:value-of
select=
"');'"
/>
<xsl:value-of
select=
"');'"
/>
<xsl:if
test=
"$has_return_arg and (@returns=$const_ref_string_type_id or @returns=$ptr_const_char_type_id)"
>
<xsl:if
test=
"$has_return_arg and (@returns=$const_ref_string_type_id or @returns=$ptr_const_char_type_id)"
>
strncpy(result, result_chars, result_length);
copyAndPadString(result, result_chars, result_length);
</xsl:if>
</xsl:if>
};
};
</xsl:template>
</xsl:template>
...
@@ -476,6 +495,31 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
...
@@ -476,6 +495,31 @@ void OPENMM_PLATFORM_LOADPLUGINSFROMDIRECTORY(const char* directory, OpenMM_Stri
</xsl:choose>
</xsl:choose>
</xsl:template>
</xsl:template>
<!-- Determine whether a type is one of the special handle types -->
<xsl:template
name=
"is_handle_type"
>
<xsl:param
name=
"type_id"
/>
<xsl:variable
name=
"node"
select=
"/GCC_XML/*[@id=$type_id]"
/>
<xsl:choose>
<xsl:when
test=
"$type_id=$vec3_type_id"
></xsl:when>
<xsl:when
test=
"$type_id=$vector_string_type_id"
>
1
</xsl:when>
<xsl:when
test=
"$type_id=$vector_vec3_type_id"
>
1
</xsl:when>
<xsl:when
test=
"$type_id=$vector_bond_type_id"
>
1
</xsl:when>
<xsl:when
test=
"$type_id=$map_parameter_type_id"
>
1
</xsl:when>
<xsl:when
test=
"$type_id=$vector_string_type_id"
>
1
</xsl:when>
<xsl:when
test=
"local-name($node)='Class' and $node/@context=$openmm_namespace_id"
>
1
</xsl:when>
<xsl:when
test=
"local-name($node)='ReferenceType' or local-name($node)='PointerType'"
>
<xsl:call-template
name=
"is_handle_type"
>
<xsl:with-param
name=
"type_id"
select=
"$node/@type"
/>
</xsl:call-template>
</xsl:when>
<xsl:when
test=
"local-name($node)='CvQualifiedType'"
>
<xsl:call-template
name=
"is_handle_type"
>
<xsl:with-param
name=
"type_id"
select=
"$node/@type"
/>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- Determine whether a method should be hidden -->
<!-- Determine whether a method should be hidden -->
<xsl:template
name=
"should_hide"
>
<xsl:template
name=
"should_hide"
>
<xsl:variable
name=
"class_id"
select=
"@context"
/>
<xsl:variable
name=
"class_id"
select=
"@context"
/>
...
...
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