xref: /petsc/lib/petsc/bin/maint/generators/d.py (revision f748bf6bfc83f133d5068e6a5445afd45844ada1)
1#!/usr/bin/env python3
2# $Id: adprocess.py,v 1.12 2001/08/24 18:26:15 bsmith Exp $
3#
4# change python to whatever is needed on your system to invoke python
5#
6#  Reads classes.data and prints the language d classes
7#
8#  Crude as all hack!
9#
10#  Calling sequence:
11#      d.py
12##
13import os
14import re
15import sys
16from string import *
17import pickle
18
19
20def main(args):
21  file = open('classes.data')
22  enums   = pickle.load(file)
23  senums  = pickle.load(file)
24  structs = pickle.load(file)
25  aliases = pickle.load(file)
26  classes = pickle.load(file)
27  outfile = open('petsc.d','w')
28
29  for i in aliases:
30    outfile.write("alias "+aliases[i]+" "+i+"; \n")
31  outfile.write("\n")
32
33  for i in senums:
34    outfile.write("alias char* "+i+"; \n")
35#    for j in senums[i]:
36#      outfile.write("alias "+senums[i][j]+" "+j+"; \n")
37
38  for i in enums:
39    outfile.write("enum "+i+"\n")
40    outfile.write("{\n")
41    cnt = 0
42    for j in enums[i]:
43      outfile.write("    "+j)
44      cnt = cnt + 1
45      if not cnt == len(enums[i]): outfile.write(",")
46      outfile.write("\n")
47    outfile.write("};\n")
48  outfile.write("\n")
49
50  for i in structs:
51    outfile.write("struct "+i+"\n")
52    outfile.write("{\n")
53    for j in structs[i]:
54      outfile.write("    "+j+";\n")
55    outfile.write("};\n")
56  outfile.write("\n")
57
58  for i in classes:
59    outfile.write("class "+i+"\n")
60    outfile.write("{\n")
61    for j in classes[i]:
62      outfile.write("  int "+j+"(")
63      cnt = 0
64      for k in classes[i][j]:
65        if cnt > 0:
66          outfile.write(k.replace("const ","").replace("unsigned long","ulong"))
67          if cnt < len(classes[i][j])-1: outfile.write(",")
68        cnt = cnt + 1
69      outfile.write("){return 0;};\n")
70    outfile.write("}\n")
71
72
73#
74# The classes in this file can also be used in other python-programs by using 'import'
75#
76if __name__ ==  '__main__':
77  main(sys.argv[1:])
78
79