Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
4ffb52ac
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4ffb52ac
编写于
5月 01, 2013
作者:
M
Matthias Bolte
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
esx: Reduce code duplication in generator
上级
ce45c761
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
118 addition
and
312 deletion
+118
-312
src/esx/esx_vi_generator.py
src/esx/esx_vi_generator.py
+118
-312
未找到文件。
src/esx/esx_vi_generator.py
浏览文件 @
4ffb52ac
...
@@ -440,8 +440,7 @@ class Type:
...
@@ -440,8 +440,7 @@ class Type:
return
string
return
string
class
GenericObject
(
Type
):
class
Object
(
Type
):
FEATURE__DYNAMIC_CAST
=
(
1
<<
1
)
FEATURE__DYNAMIC_CAST
=
(
1
<<
1
)
FEATURE__LIST
=
(
1
<<
2
)
FEATURE__LIST
=
(
1
<<
2
)
FEATURE__DEEP_COPY
=
(
1
<<
3
)
FEATURE__DEEP_COPY
=
(
1
<<
3
)
...
@@ -450,16 +449,36 @@ class Object(Type):
...
@@ -450,16 +449,36 @@ class Object(Type):
FEATURE__DESERIALIZE
=
(
1
<<
6
)
FEATURE__DESERIALIZE
=
(
1
<<
6
)
def
__init__
(
self
,
name
,
extends
,
properties
,
features
=
0
,
extended_by
=
Non
e
):
def
__init__
(
self
,
name
,
category
,
managed
,
generic_objects_by_nam
e
):
Type
.
__init__
(
self
,
"struct"
,
name
)
Type
.
__init__
(
self
,
"struct"
,
name
)
self
.
extends
=
extends
self
.
category
=
category
self
.
features
=
features
self
.
managed
=
managed
self
.
properties
=
properties
self
.
generic_objects_by_name
=
generic_objects_by_name
self
.
extended_by
=
extended_by
self
.
candidate_for_dynamic_cast
=
False
def
generate_comment
(
self
):
comment
=
separator
comment
+=
" * %s: %s
\n
"
%
(
self
.
category
,
self
.
name
)
if
self
.
extends
is
not
None
:
comment
+=
" * %s extends %s
\n
"
\
%
(
' '
*
len
(
self
.
category
),
self
.
extends
)
first
=
True
if
self
.
extended_by
is
not
None
:
if
self
.
extended_by
is
not
None
:
self
.
extended_by
.
sort
()
for
extended_by
in
self
.
extended_by
:
if
first
:
comment
+=
" * %s extended by %s
\n
"
\
%
(
' '
*
len
(
self
.
category
),
extended_by
)
first
=
False
else
:
comment
+=
" * %s %s
\n
"
\
%
(
' '
*
len
(
self
.
category
),
extended_by
)
comment
+=
" */
\n\n
"
return
comment
def
generate_struct_members
(
self
,
add_banner
=
False
,
struct_gap
=
False
):
def
generate_struct_members
(
self
,
add_banner
=
False
,
struct_gap
=
False
):
...
@@ -469,7 +488,7 @@ class Object(Type):
...
@@ -469,7 +488,7 @@ class Object(Type):
members
+=
"
\n
"
members
+=
"
\n
"
if
self
.
extends
is
not
None
:
if
self
.
extends
is
not
None
:
members
+=
objects_by_name
[
self
.
extends
]
\
members
+=
self
.
generic_
objects_by_name
[
self
.
extends
]
\
.
generate_struct_members
(
add_banner
=
True
,
.
generate_struct_members
(
add_banner
=
True
,
struct_gap
=
False
)
+
"
\n
"
struct_gap
=
False
)
+
"
\n
"
...
@@ -499,7 +518,7 @@ class Object(Type):
...
@@ -499,7 +518,7 @@ class Object(Type):
%
(
suffix
,
extended_by
)
%
(
suffix
,
extended_by
)
for
extended_by
in
self
.
extended_by
:
for
extended_by
in
self
.
extended_by
:
source
+=
objects_by_name
[
extended_by
]
\
source
+=
self
.
generic_
objects_by_name
[
extended_by
]
\
.
generate_dispatch
(
suffix
,
False
)
.
generate_dispatch
(
suffix
,
False
)
return
source
return
source
...
@@ -509,7 +528,7 @@ class Object(Type):
...
@@ -509,7 +528,7 @@ class Object(Type):
source
=
""
source
=
""
if
self
.
extends
is
not
None
:
if
self
.
extends
is
not
None
:
source
+=
objects_by_name
[
self
.
extends
]
\
source
+=
self
.
generic_
objects_by_name
[
self
.
extends
]
\
.
generate_free_code
(
add_banner
=
True
)
+
"
\n
"
.
generate_free_code
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
if
self
.
extends
is
not
None
or
add_banner
:
...
@@ -535,7 +554,7 @@ class Object(Type):
...
@@ -535,7 +554,7 @@ class Object(Type):
source
=
""
source
=
""
if
self
.
extends
is
not
None
:
if
self
.
extends
is
not
None
:
source
+=
objects_by_name
[
self
.
extends
]
\
source
+=
self
.
generic_
objects_by_name
[
self
.
extends
]
\
.
generate_validate_code
(
add_banner
=
True
)
+
"
\n
"
.
generate_validate_code
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
if
self
.
extends
is
not
None
or
add_banner
:
...
@@ -547,7 +566,7 @@ class Object(Type):
...
@@ -547,7 +566,7 @@ class Object(Type):
string
=
""
string
=
""
for
property
in
self
.
properties
:
for
property
in
self
.
properties
:
string
+=
property
.
generate_validate_code
()
string
+=
property
.
generate_validate_code
(
self
.
managed
)
if
len
(
string
)
<
1
:
if
len
(
string
)
<
1
:
source
+=
" /* no required properties */
\n
"
source
+=
" /* no required properties */
\n
"
...
@@ -557,6 +576,20 @@ class Object(Type):
...
@@ -557,6 +576,20 @@ class Object(Type):
return
source
return
source
class
Object
(
GenericObject
):
def
__init__
(
self
,
name
,
extends
,
properties
,
features
=
0
,
extended_by
=
None
):
GenericObject
.
__init__
(
self
,
name
,
'VI Object'
,
False
,
objects_by_name
)
self
.
extends
=
extends
self
.
features
=
features
self
.
properties
=
properties
self
.
extended_by
=
extended_by
self
.
candidate_for_dynamic_cast
=
False
if
self
.
extended_by
is
not
None
:
self
.
extended_by
.
sort
()
def
generate_dynamic_cast_code
(
self
,
is_first
=
True
):
def
generate_dynamic_cast_code
(
self
,
is_first
=
True
):
source
=
""
source
=
""
...
@@ -642,23 +675,7 @@ class Object(Type):
...
@@ -642,23 +675,7 @@ class Object(Type):
def
generate_header
(
self
):
def
generate_header
(
self
):
header
=
separator
header
=
self
.
generate_comment
()
header
+=
" * VI Object: %s
\n
"
%
self
.
name
if
self
.
extends
is
not
None
:
header
+=
" * extends %s
\n
"
%
self
.
extends
first
=
True
if
self
.
extended_by
is
not
None
:
for
extended_by
in
self
.
extended_by
:
if
first
:
header
+=
" * extended by %s
\n
"
%
extended_by
first
=
False
else
:
header
+=
" * %s
\n
"
%
extended_by
header
+=
" */
\n\n
"
# struct
# struct
header
+=
"struct _esxVI_%s {
\n
"
%
self
.
name
header
+=
"struct _esxVI_%s {
\n
"
%
self
.
name
...
@@ -762,33 +779,16 @@ class Object(Type):
...
@@ -762,33 +779,16 @@ class Object(Type):
source
+=
"ESX_VI__TEMPLATE__ALLOC(%s)
\n\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__ALLOC(%s)
\n\n
"
%
self
.
name
# free
# free
if
self
.
extended_by
is
None
:
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__FREE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
extends
is
not
None
:
# avoid "dereferencing type-punned pointer will break
# strict-aliasing rules" warnings
source
+=
" esxVI_%s *next = (esxVI_%s *)item->_next;
\n\n
"
\
%
(
self
.
extends
,
self
.
extends
)
source
+=
" esxVI_%s_Free(&next);
\n
"
%
self
.
extends
source
+=
" item->_next = (esxVI_%s *)next;
\n\n
"
%
self
.
name
else
:
source
+=
" esxVI_%s_Free(&item->_next);
\n\n
"
%
self
.
name
source
+=
self
.
generate_free_code
()
if
self
.
extended_by
is
None
:
source
+=
"ESX_VI__TEMPLATE__FREE(%s,
\n
"
%
self
.
name
source
+=
"})
\n\n
"
else
:
else
:
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dispatch
(
'FREE'
)
source
+=
self
.
generate_dispatch
(
'FREE'
)
source
+=
"},
\n
"
source
+=
"},
\n
"
source
+=
"{
\n
"
source
+=
"{
\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
features
&
Object
.
FEATURE__LIST
:
...
@@ -803,16 +803,13 @@ class Object(Type):
...
@@ -803,16 +803,13 @@ class Object(Type):
source
+=
" esxVI_%s_Free(&item->_next);
\n\n
"
%
self
.
name
source
+=
" esxVI_%s_Free(&item->_next);
\n\n
"
%
self
.
name
source
+=
self
.
generate_free_code
()
source
+=
self
.
generate_free_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
# validate
# validate
source
+=
"/* esxVI_%s_Validate */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_Validate */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__VALIDATE(%s,
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__VALIDATE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_validate_code
()
source
+=
self
.
generate_validate_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
# dynamic cast
# dynamic cast
...
@@ -821,9 +818,7 @@ class Object(Type):
...
@@ -821,9 +818,7 @@ class Object(Type):
source
+=
"/* esxVI_%s_DynamicCast */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_DynamicCast */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_CAST(%s,
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_CAST(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dynamic_cast_code
()
source
+=
self
.
generate_dynamic_cast_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
else
:
else
:
report_error
(
"cannot add dynamic cast support for an untyped object"
)
report_error
(
"cannot add dynamic cast support for an untyped object"
)
...
@@ -834,33 +829,19 @@ class Object(Type):
...
@@ -834,33 +829,19 @@ class Object(Type):
source
+=
"ESX_VI__TEMPLATE__LIST__APPEND(%s)
\n\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__LIST__APPEND(%s)
\n\n
"
%
self
.
name
# deep copy
# deep copy
if
self
.
extended_by
is
None
:
if
self
.
features
&
Object
.
FEATURE__DEEP_COPY
:
if
self
.
features
&
Object
.
FEATURE__DEEP_COPY
:
source
+=
"/* esxVI_%s_DeepCopy */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_DeepCopy */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DEEP_COPY(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
self
.
generate_deep_copy_code
()
source
+=
"})
\n\n
"
if
self
.
extended_by
is
None
:
source
+=
"ESX_VI__TEMPLATE__DEEP_COPY(%s,
\n
"
%
self
.
name
if
self
.
features
&
Object
.
FEATURE__LIST
:
source
+=
"/* esxVI_%s_DeepCopyList */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__LIST__DEEP_COPY(%s)
\n\n
"
\
%
self
.
name
else
:
else
:
if
self
.
features
&
Object
.
FEATURE__DEEP_COPY
:
source
+=
"/* esxVI_%s_DeepCopy */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_DEEP_COPY(%s,
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_DEEP_COPY(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dispatch
(
'DEEP_COPY'
)
source
+=
self
.
generate_dispatch
(
'DEEP_COPY'
)
source
+=
"},
\n
"
source
+=
"},
\n
"
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_deep_copy_code
()
source
+=
self
.
generate_deep_copy_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
features
&
Object
.
FEATURE__LIST
:
...
@@ -879,9 +860,7 @@ class Object(Type):
...
@@ -879,9 +860,7 @@ class Object(Type):
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_CAST_FROM_ANY_TYPE(%s,
\n
"
\
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_CAST_FROM_ANY_TYPE(%s,
\n
"
\
%
self
.
name
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dispatch
(
'CAST_FROM_ANY_TYPE'
)
source
+=
self
.
generate_dispatch
(
'CAST_FROM_ANY_TYPE'
)
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
features
&
Object
.
FEATURE__LIST
:
...
@@ -890,33 +869,19 @@ class Object(Type):
...
@@ -890,33 +869,19 @@ class Object(Type):
%
self
.
name
%
self
.
name
# serialize
# serialize
if
self
.
extended_by
is
None
:
if
self
.
features
&
Object
.
FEATURE__SERIALIZE
:
if
self
.
features
&
Object
.
FEATURE__SERIALIZE
:
source
+=
"/* esxVI_%s_Serialize */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_Serialize */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__SERIALIZE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
self
.
generate_serialize_code
()
source
+=
"})
\n\n
"
if
self
.
extended_by
is
None
:
source
+=
"ESX_VI__TEMPLATE__SERIALIZE(%s,
\n
"
%
self
.
name
if
self
.
features
&
Object
.
FEATURE__LIST
:
source
+=
"/* esxVI_%s_SerializeList */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__LIST__SERIALIZE(%s)
\n\n
"
\
%
self
.
name
else
:
else
:
if
self
.
features
&
Object
.
FEATURE__SERIALIZE
:
source
+=
"/* esxVI_%s_Serialize */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_SERIALIZE(%s,
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_SERIALIZE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dispatch
(
'SERIALIZE'
)
source
+=
self
.
generate_dispatch
(
'SERIALIZE'
)
source
+=
"},
\n
"
source
+=
"},
\n
"
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_serialize_code
()
source
+=
self
.
generate_serialize_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
features
&
Object
.
FEATURE__LIST
:
...
@@ -925,34 +890,20 @@ class Object(Type):
...
@@ -925,34 +890,20 @@ class Object(Type):
%
self
.
name
%
self
.
name
# deserialize
# deserialize
if
self
.
extended_by
is
None
:
if
self
.
features
&
Object
.
FEATURE__DESERIALIZE
:
if
self
.
features
&
Object
.
FEATURE__DESERIALIZE
:
source
+=
"/* esxVI_%s_Deserialize */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_Deserialize */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DESERIALIZE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
self
.
generate_deserialize_code
()
if
self
.
extended_by
is
None
:
source
+=
"ESX_VI__TEMPLATE__DESERIALIZE(%s,
\n
"
%
self
.
name
source
+=
"})
\n\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
source
+=
"/* esxVI_%s_DeserializeList */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__LIST__DESERIALIZE(%s)
\n\n
"
\
%
self
.
name
else
:
else
:
if
self
.
features
&
Object
.
FEATURE__DESERIALIZE
:
source
+=
"/* esxVI_%s_Deserialize */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_DESERIALIZE(%s,
\n
"
\
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_DESERIALIZE(%s,
\n
"
\
%
self
.
name
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dispatch
(
'DESERIALIZE'
)
source
+=
self
.
generate_dispatch
(
'DESERIALIZE'
)
source
+=
"},
\n
"
source
+=
"},
\n
"
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_deserialize_code
()
source
+=
self
.
generate_deserialize_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
features
&
Object
.
FEATURE__LIST
:
...
@@ -966,12 +917,10 @@ class Object(Type):
...
@@ -966,12 +917,10 @@ class Object(Type):
class
ManagedObject
(
Type
):
class
ManagedObject
(
GenericObject
):
FEATURE__LIST
=
(
1
<<
2
)
def
__init__
(
self
,
name
,
extends
,
properties
,
features
=
0
,
extended_by
=
None
):
def
__init__
(
self
,
name
,
extends
,
properties
,
features
=
0
,
extended_by
=
None
):
Type
.
__init__
(
self
,
"struct"
,
name
)
GenericObject
.
__init__
(
self
,
name
,
'VI Managed Object'
,
True
,
managed_objects_by_name
)
self
.
extends
=
extends
self
.
extends
=
extends
self
.
features
=
features
self
.
features
=
features
self
.
properties
=
properties
self
.
properties
=
properties
...
@@ -981,100 +930,6 @@ class ManagedObject(Type):
...
@@ -981,100 +930,6 @@ class ManagedObject(Type):
self
.
extended_by
.
sort
()
self
.
extended_by
.
sort
()
def
generate_struct_members
(
self
,
add_banner
=
False
,
struct_gap
=
False
):
members
=
""
if
struct_gap
:
members
+=
"
\n
"
if
self
.
extends
is
not
None
:
members
+=
managed_objects_by_name
[
self
.
extends
]
\
.
generate_struct_members
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
members
+=
" /* %s */
\n
"
%
self
.
name
for
property
in
self
.
properties
:
members
+=
property
.
generate_struct_member
()
if
len
(
self
.
properties
)
<
1
:
members
+=
" /* no properties */
\n
"
return
members
def
generate_dispatch
(
self
,
suffix
,
is_first
=
True
):
source
=
""
if
self
.
extended_by
is
not
None
:
if
not
is_first
:
source
+=
"
\n
"
source
+=
" /* %s */
\n
"
%
self
.
name
for
extended_by
in
self
.
extended_by
:
source
+=
" ESX_VI__TEMPLATE__DISPATCH__%s(%s)
\n
"
\
%
(
suffix
,
extended_by
)
for
extended_by
in
self
.
extended_by
:
source
+=
managed_objects_by_name
[
extended_by
]
\
.
generate_dispatch
(
suffix
,
False
)
return
source
def
generate_free_code
(
self
,
add_banner
=
False
):
source
=
""
if
self
.
extends
is
not
None
:
source
+=
managed_objects_by_name
[
self
.
extends
]
\
.
generate_free_code
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
source
+=
" /* %s */
\n
"
%
self
.
name
if
len
(
self
.
properties
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
string
=
""
for
property
in
self
.
properties
:
string
+=
property
.
generate_free_code
()
if
len
(
string
)
<
1
:
source
+=
" /* no properties to be freed */
\n
"
else
:
source
+=
string
return
source
def
generate_validate_code
(
self
,
add_banner
=
False
):
source
=
""
if
self
.
extends
is
not
None
:
source
+=
managed_objects_by_name
[
self
.
extends
]
\
.
generate_validate_code
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
source
+=
" /* %s */
\n
"
%
self
.
name
if
len
(
self
.
properties
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
string
=
""
for
property
in
self
.
properties
:
string
+=
property
.
generate_validate_code
(
managed
=
True
)
if
len
(
string
)
<
1
:
source
+=
" /* no required properties */
\n
"
else
:
source
+=
string
return
source
def
generate_lookup_code1
(
self
,
add_banner
=
False
):
def
generate_lookup_code1
(
self
,
add_banner
=
False
):
source
=
""
source
=
""
...
@@ -1127,30 +982,6 @@ class ManagedObject(Type):
...
@@ -1127,30 +982,6 @@ class ManagedObject(Type):
return
source
return
source
def
generate_comment
(
self
):
comment
=
separator
comment
+=
" * VI Managed Object: %s
\n
"
%
self
.
name
if
self
.
extends
is
not
None
:
comment
+=
" * extends %s
\n
"
%
self
.
extends
first
=
True
if
self
.
extended_by
is
not
None
:
for
extended_by
in
self
.
extended_by
:
if
first
:
comment
+=
" * extended by %s
\n
"
\
%
extended_by
first
=
False
else
:
comment
+=
" * %s
\n
"
\
%
extended_by
comment
+=
" */
\n\n
"
return
comment
def
generate_header
(
self
):
def
generate_header
(
self
):
header
=
self
.
generate_comment
()
header
=
self
.
generate_comment
()
...
@@ -1169,7 +1000,6 @@ class ManagedObject(Type):
...
@@ -1169,7 +1000,6 @@ class ManagedObject(Type):
"/* required */
\n
"
)
"/* required */
\n
"
)
header
+=
"
\n
"
header
+=
"
\n
"
header
+=
self
.
generate_struct_members
()
header
+=
self
.
generate_struct_members
()
header
+=
"};
\n\n
"
header
+=
"};
\n\n
"
# functions
# functions
...
@@ -1213,35 +1043,16 @@ class ManagedObject(Type):
...
@@ -1213,35 +1043,16 @@ class ManagedObject(Type):
source
+=
"ESX_VI__TEMPLATE__ALLOC(%s)
\n\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__ALLOC(%s)
\n\n
"
%
self
.
name
# free
# free
if
self
.
extended_by
is
None
:
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__FREE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
if
self
.
features
&
ManagedObject
.
FEATURE__LIST
:
if
self
.
extended_by
is
None
:
if
self
.
extends
is
not
None
:
source
+=
"ESX_VI__TEMPLATE__FREE(%s,
\n
"
%
self
.
name
# avoid "dereferencing type-punned pointer will break
# strict-aliasing rules" warnings
source
+=
" esxVI_%s *next = (esxVI_%s *)item->_next;
\n\n
"
\
%
(
self
.
extends
,
self
.
extends
)
source
+=
" esxVI_%s_Free(&next);
\n
"
%
self
.
extends
source
+=
" item->_next = (esxVI_%s *)next;
\n\n
"
%
self
.
name
else
:
source
+=
" esxVI_%s_Free(&item->_next);
\n
"
%
self
.
name
source
+=
" esxVI_ManagedObjectReference_Free(&item->_reference);
\n\n
"
source
+=
self
.
generate_free_code
()
source
+=
"})
\n\n
"
else
:
else
:
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_dispatch
(
'FREE'
)
source
+=
self
.
generate_dispatch
(
'FREE'
)
source
+=
"},
\n
"
source
+=
"},
\n
"
source
+=
"{
\n
"
source
+=
"{
\n
"
if
self
.
features
&
ManagedObject
.
FEATURE__LIST
:
if
self
.
features
&
ManagedObject
.
FEATURE__LIST
:
...
@@ -1256,9 +1067,7 @@ class ManagedObject(Type):
...
@@ -1256,9 +1067,7 @@ class ManagedObject(Type):
source
+=
" esxVI_%s_Free(&item->_next);
\n
"
%
self
.
name
source
+=
" esxVI_%s_Free(&item->_next);
\n
"
%
self
.
name
source
+=
" esxVI_ManagedObjectReference_Free(&item->_reference);
\n\n
"
source
+=
" esxVI_ManagedObjectReference_Free(&item->_reference);
\n\n
"
source
+=
self
.
generate_free_code
()
source
+=
self
.
generate_free_code
()
source
+=
"})
\n\n
"
source
+=
"})
\n\n
"
# validate
# validate
...
@@ -1319,8 +1128,6 @@ class Enum(Type):
...
@@ -1319,8 +1128,6 @@ class Enum(Type):
header
=
separator
header
=
separator
header
+=
" * VI Enum: %s
\n
"
%
self
.
name
header
+=
" * VI Enum: %s
\n
"
%
self
.
name
header
+=
" */
\n\n
"
header
+=
" */
\n\n
"
# enum
header
+=
"enum _esxVI_%s {
\n
"
%
self
.
name
header
+=
"enum _esxVI_%s {
\n
"
%
self
.
name
header
+=
" esxVI_%s_Undefined = 0,
\n
"
%
self
.
name
header
+=
" esxVI_%s_Undefined = 0,
\n
"
%
self
.
name
...
@@ -1354,7 +1161,6 @@ class Enum(Type):
...
@@ -1354,7 +1161,6 @@ class Enum(Type):
source
=
separator
source
=
separator
source
+=
" * VI Enum: %s
\n
"
%
self
.
name
source
+=
" * VI Enum: %s
\n
"
%
self
.
name
source
+=
" */
\n\n
"
source
+=
" */
\n\n
"
source
+=
"static const esxVI_Enumeration _esxVI_%s_Enumeration = {
\n
"
\
source
+=
"static const esxVI_Enumeration _esxVI_%s_Enumeration = {
\n
"
\
%
self
.
name
%
self
.
name
source
+=
" esxVI_Type_%s, {
\n
"
%
self
.
name
source
+=
" esxVI_Type_%s, {
\n
"
%
self
.
name
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录