/* libengine.h generated by valac 0.56.19, the Vala compiler, do not modify */

#ifndef __ENGINE_LIBENGINE_H__
#define __ENGINE_LIBENGINE_H__

#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include "libchess.h"

G_BEGIN_DECLS

#if !defined(VALA_EXTERN)
#if defined(_MSC_VER)
#define VALA_EXTERN __declspec(dllexport) extern
#elif __GNUC__ >= 4
#define VALA_EXTERN __attribute__((visibility("default"))) extern
#else
#define VALA_EXTERN extern
#endif
#endif

#define TYPE_AI_PROFILE (ai_profile_get_type ())
#define AI_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AI_PROFILE, AIProfile))
#define AI_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AI_PROFILE, AIProfileClass))
#define IS_AI_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AI_PROFILE))
#define IS_AI_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AI_PROFILE))
#define AI_PROFILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AI_PROFILE, AIProfileClass))

typedef struct _AIProfile AIProfile;
typedef struct _AIProfileClass AIProfileClass;
typedef struct _AIProfilePrivate AIProfilePrivate;

#define TYPE_CHESS_ENGINE (chess_engine_get_type ())
#define CHESS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_ENGINE, ChessEngine))
#define CHESS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_ENGINE, ChessEngineClass))
#define IS_CHESS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_ENGINE))
#define IS_CHESS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_ENGINE))
#define CHESS_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_ENGINE, ChessEngineClass))

typedef struct _ChessEngine ChessEngine;
typedef struct _ChessEngineClass ChessEngineClass;
typedef struct _ChessEnginePrivate ChessEnginePrivate;

#define TYPE_CHESS_ENGINE_CECP (chess_engine_cecp_get_type ())
#define CHESS_ENGINE_CECP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_ENGINE_CECP, ChessEngineCECP))
#define CHESS_ENGINE_CECP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_ENGINE_CECP, ChessEngineCECPClass))
#define IS_CHESS_ENGINE_CECP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_ENGINE_CECP))
#define IS_CHESS_ENGINE_CECP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_ENGINE_CECP))
#define CHESS_ENGINE_CECP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_ENGINE_CECP, ChessEngineCECPClass))

typedef struct _ChessEngineCECP ChessEngineCECP;
typedef struct _ChessEngineCECPClass ChessEngineCECPClass;
typedef struct _ChessEngineCECPPrivate ChessEngineCECPPrivate;

#define TYPE_CHESS_ENGINE_UCI (chess_engine_uci_get_type ())
#define CHESS_ENGINE_UCI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_ENGINE_UCI, ChessEngineUCI))
#define CHESS_ENGINE_UCI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_ENGINE_UCI, ChessEngineUCIClass))
#define IS_CHESS_ENGINE_UCI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_ENGINE_UCI))
#define IS_CHESS_ENGINE_UCI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_ENGINE_UCI))
#define CHESS_ENGINE_UCI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_ENGINE_UCI, ChessEngineUCIClass))

typedef struct _ChessEngineUCI ChessEngineUCI;
typedef struct _ChessEngineUCIClass ChessEngineUCIClass;
typedef struct _ChessEngineUCIPrivate ChessEngineUCIPrivate;

struct _AIProfile {
	GObject parent_instance;
	AIProfilePrivate * priv;
};

struct _AIProfileClass {
	GObjectClass parent_class;
};

struct _ChessEngine {
	GObject parent_instance;
	ChessEnginePrivate * priv;
};

struct _ChessEngineClass {
	GObjectClass parent_class;
	void (*process_input) (ChessEngine* self, gchar* data, gint data_length1);
	void (*start_game) (ChessEngine* self);
	void (*report_move) (ChessEngine* self, ChessMove* move);
	void (*do_undo) (ChessEngine* self);
	void (*request_move) (ChessEngine* self, ChessClock* clock, gint timeout);
};

struct _ChessEngineCECP {
	ChessEngine parent_instance;
	ChessEngineCECPPrivate * priv;
};

struct _ChessEngineCECPClass {
	ChessEngineClass parent_class;
};

struct _ChessEngineUCI {
	ChessEngine parent_instance;
	ChessEngineUCIPrivate * priv;
};

struct _ChessEngineUCIClass {
	ChessEngineClass parent_class;
};

VALA_EXTERN GType ai_profile_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (AIProfile, g_object_unref)
VALA_EXTERN GList* ai_profile_load_ai_profiles (const gchar* filename);
VALA_EXTERN AIProfile* ai_profile_new (void);
VALA_EXTERN AIProfile* ai_profile_construct (GType object_type);
VALA_EXTERN const gchar* ai_profile_get_name (AIProfile* self);
VALA_EXTERN const gchar* ai_profile_get_protocol (AIProfile* self);
VALA_EXTERN const gchar* ai_profile_get_binary (AIProfile* self);
VALA_EXTERN const gchar* ai_profile_get_path (AIProfile* self);
VALA_EXTERN guint ai_profile_get_delay_seconds (AIProfile* self);
VALA_EXTERN gchar** ai_profile_get_easy_args (AIProfile* self,
                                  gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_normal_args (AIProfile* self,
                                    gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_hard_args (AIProfile* self,
                                  gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_easy_options (AIProfile* self,
                                     gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_normal_options (AIProfile* self,
                                       gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_hard_options (AIProfile* self,
                                     gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_easy_uci_go_options (AIProfile* self,
                                            gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_normal_uci_go_options (AIProfile* self,
                                              gint* result_length1);
VALA_EXTERN gchar** ai_profile_get_hard_uci_go_options (AIProfile* self,
                                            gint* result_length1);
VALA_EXTERN GType chess_engine_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ChessEngine, g_object_unref)
VALA_EXTERN GType chess_engine_cecp_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ChessEngineCECP, g_object_unref)
VALA_EXTERN ChessEngineCECP* chess_engine_cecp_new (const gchar* binary,
                                        gchar** args,
                                        gint args_length1,
                                        guint delay_seconds,
                                        gchar** options,
                                        gint options_length1);
VALA_EXTERN ChessEngineCECP* chess_engine_cecp_construct (GType object_type,
                                              const gchar* binary,
                                              gchar** args,
                                              gint args_length1,
                                              guint delay_seconds,
                                              gchar** options,
                                              gint options_length1);
VALA_EXTERN GType chess_engine_uci_get_type (void) G_GNUC_CONST ;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ChessEngineUCI, g_object_unref)
VALA_EXTERN ChessEngineUCI* chess_engine_uci_new (const gchar* binary,
                                      gchar** args,
                                      gint args_length1,
                                      guint delay_seconds,
                                      gchar** options,
                                      gint options_length1,
                                      gchar** go_options,
                                      gint go_options_length1);
VALA_EXTERN ChessEngineUCI* chess_engine_uci_construct (GType object_type,
                                            const gchar* binary,
                                            gchar** args,
                                            gint args_length1,
                                            guint delay_seconds,
                                            gchar** options,
                                            gint options_length1,
                                            gchar** go_options,
                                            gint go_options_length1);
VALA_EXTERN void chess_engine_process_input (ChessEngine* self,
                                 gchar* data,
                                 gint data_length1);
VALA_EXTERN ChessEngine* chess_engine_construct (GType object_type,
                                     const gchar* binary,
                                     gchar** args,
                                     gint args_length1,
                                     guint delay_seconds);
VALA_EXTERN gboolean chess_engine_start (ChessEngine* self);
VALA_EXTERN void chess_engine_start_game (ChessEngine* self);
VALA_EXTERN void chess_engine_report_move (ChessEngine* self,
                               ChessMove* move);
VALA_EXTERN void chess_engine_do_undo (ChessEngine* self);
VALA_EXTERN void chess_engine_request_move (ChessEngine* self,
                                ChessClock* clock,
                                gint timeout);
VALA_EXTERN void chess_engine_move (ChessEngine* self,
                        ChessClock* clock,
                        gint timeout);
VALA_EXTERN void chess_engine_undo (ChessEngine* self);
VALA_EXTERN void chess_engine_stop (ChessEngine* self,
                        gboolean kill_engine);
VALA_EXTERN void chess_engine_write (ChessEngine* self,
                         gchar* data,
                         gint data_length1);
VALA_EXTERN void chess_engine_write_line (ChessEngine* self,
                              const gchar* line);

G_END_DECLS

#endif
