aboutsummaryrefslogtreecommitdiff
path: root/g2p2g_smob.h
blob: 4c7fa1e3ca952df03800885836d217c5efae68c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// g2p2g_smob header file
//
////////////////////////////////////////////////////////////////////////

#ifndef G2P2G_SMOB_H
#define G2P2G_SMOB_H

////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2008 Omer Zak.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this library, in a file named COPYING; if not, write to the
// Free Software Foundation, Inc., 59 Temple Place, Suite 330,
// Boston, MA  02111-1307  USA
//
// For licensing issues, contact <w1@zak.co.il>.
//
////////////////////////////////////////////////////////////////////////
//
// Declares the G2P2G_SMOB type, which encapsulates g2p and p2g conversion
// routines, for use in defining templates for converting arguments and
// results of Python functions.

#include <Python.h>   // Must be first header file
#include <libguile.h>


// The following are the ones to be used in validating conversion
// templates.
extern int IS_G2P_SMOBP(SCM sobj);
extern int IS_P2G_SMOBP(SCM sobj);

typedef PyObject *(*g2p_func_ptr)(SCM,SCM);
extern g2p_func_ptr get_g2p_function(SCM smob);

// The name must start with 'g' which is used as part of the
// real name (which by convention always starts with 'g2p_').
// The function does NOT take over ownership of the name, so the
// caller must ensure it continues to exist.
//
// This function creates a g2p2g_smob pointing at the g2p function,
// and also defines (in the current environment) a symbol
// whose value is the g2p2g_smob.
extern SCM bind_g2p_function(g2p_func_ptr, const char* name);

typedef SCM (*p2g_func_ptr)(PyObject *,SCM);
extern p2g_func_ptr get_p2g_function(SCM smob);

// The name must start with 'p' which is used as part of the
// real name (which by convention always starts with 'p2g_').
// The function does NOT take over ownership of the name, so the
// caller must ensure it continues to exist.
//
// This function creates a g2p2g_smob pointing at the p2g function,
// and also defines (in the current environment) a symbol
// whose value is the g2p2g_smob.
extern SCM bind_p2g_function(p2g_func_ptr, const char* name);

extern void init_g2p2g_smob_type(void);

////////////////////////////////////////////////////////////////////////
// The following functions are defined in autogenerated *.inc files.

extern void bind_g2p_functions(void);
extern void bind_p2g_functions(void);

#endif /* G2P2G_SMOB_H */
////////////////////////////////////////////////////////////////////////
// End of g2p2g_smob.h