
#ifdef __cplusplus
extern "C" {
#endif

#pragma once


#include "OGDFType.h"

#include "STDDeletable.h"

#include "stdcxxType.h"


#define GRAPH_DECL_VIRT(Type) \



#define GRAPH_DECL_NONVIRT(Type) \
Type##_p Type##_newGraph (  );\
NodeElement_p Type##_graph_newNode ( Type##_p p );\
NodeElement_p Type##_newNode1 ( Type##_p p, int index );\
EdgeElement_p Type##_graph_newEdge ( Type##_p p, NodeElement_p v, NodeElement_p w );\
NodeElement_p Type##_graph_firstNode ( Type##_p p );\
NodeElement_p Type##_graph_lastNode ( Type##_p p );\
EdgeElement_p Type##_graph_firstEdge ( Type##_p p );\
EdgeElement_p Type##_graph_lastEdge ( Type##_p p );


#define GRAPH_DECL_ACCESSOR(Type) \



#define GRAPH_DEF_VIRT(Type) \



#define GRAPH_DEF_NONVIRT(Type) \
Type##_p Type##_newGraph (  ) {\
Type* newp=new Type();return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
}\
\
NodeElement_p Type##_graph_newNode ( Type##_p p ) {\
return from_nonconst_to_nonconst<NodeElement_t, NodeElement>((NodeElement*)((TYPECASTMETHOD(Type, graph_newNode, Graph))(p))->newNode());\
}\
\
NodeElement_p Type##_newNode1 ( Type##_p p, int index ) {\
return from_nonconst_to_nonconst<NodeElement_t, NodeElement>((NodeElement*)((TYPECASTMETHOD(Type, newNode1, Graph))(p))->newNode(index));\
}\
\
EdgeElement_p Type##_graph_newEdge ( Type##_p p, NodeElement_p v, NodeElement_p w ) {\
return from_nonconst_to_nonconst<EdgeElement_t, EdgeElement>((EdgeElement*)((TYPECASTMETHOD(Type, graph_newEdge, Graph))(p))->newEdge(from_nonconst_to_nonconst<NodeElement, NodeElement_t>(v), from_nonconst_to_nonconst<NodeElement, NodeElement_t>(w)));\
}\
\
NodeElement_p Type##_graph_firstNode ( Type##_p p ) {\
return from_nonconst_to_nonconst<NodeElement_t, NodeElement>((NodeElement*)((TYPECASTMETHOD(Type, graph_firstNode, Graph))(p))->firstNode());\
}\
\
NodeElement_p Type##_graph_lastNode ( Type##_p p ) {\
return from_nonconst_to_nonconst<NodeElement_t, NodeElement>((NodeElement*)((TYPECASTMETHOD(Type, graph_lastNode, Graph))(p))->lastNode());\
}\
\
EdgeElement_p Type##_graph_firstEdge ( Type##_p p ) {\
return from_nonconst_to_nonconst<EdgeElement_t, EdgeElement>((EdgeElement*)((TYPECASTMETHOD(Type, graph_firstEdge, Graph))(p))->firstEdge());\
}\
\
EdgeElement_p Type##_graph_lastEdge ( Type##_p p ) {\
return from_nonconst_to_nonconst<EdgeElement_t, EdgeElement>((EdgeElement*)((TYPECASTMETHOD(Type, graph_lastEdge, Graph))(p))->lastEdge());\
}


#define GRAPH_DEF_ACCESSOR(Type) \



DELETABLE_DECL_VIRT(Graph)
GRAPH_DECL_VIRT(Graph)
GRAPH_DECL_NONVIRT(Graph)
GRAPH_DECL_ACCESSOR(Graph)

#ifdef __cplusplus
}
#endif

