/*******************************************************************************
 * Copyright (c) 2020 Equo
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *    Guillermo Zunino, Equo - initial implementation
 *******************************************************************************/

/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */
/* DO NOT EDIT - your changes will be lost. */

#include "chromiumlib.h"

#ifndef NO_FunctionSt
void cacheFunctionStFields(JNIEnv *env, jobject lpObject);
FunctionSt *getFunctionStFields(JNIEnv *env, jobject lpObject, FunctionSt *lpStruct);
void setFunctionStFields(JNIEnv *env, jobject lpObject, FunctionSt *lpStruct);
#define FunctionSt_sizeof() sizeof(FunctionSt)
#else
#define cacheFunctionStFields(a,b)
#define getFunctionStFields(a,b,c) NULL
#define setFunctionStFields(a,b,c)
#define FunctionSt_sizeof() 0
#endif

#ifndef NO_cef_app_t
void cachecef_app_tFields(JNIEnv *env, jobject lpObject);
cef_app_t *getcef_app_tFields(JNIEnv *env, jobject lpObject, cef_app_t *lpStruct);
void setcef_app_tFields(JNIEnv *env, jobject lpObject, cef_app_t *lpStruct);
#define cef_app_t_sizeof() sizeof(cef_app_t)
#else
#define cachecef_app_tFields(a,b)
#define getcef_app_tFields(a,b,c) NULL
#define setcef_app_tFields(a,b,c)
#define cef_app_t_sizeof() 0
#endif

#ifndef NO_cef_base_ref_counted_t
void cachecef_base_ref_counted_tFields(JNIEnv *env, jobject lpObject);
cef_base_ref_counted_t *getcef_base_ref_counted_tFields(JNIEnv *env, jobject lpObject, cef_base_ref_counted_t *lpStruct);
void setcef_base_ref_counted_tFields(JNIEnv *env, jobject lpObject, cef_base_ref_counted_t *lpStruct);
#define cef_base_ref_counted_t_sizeof() sizeof(cef_base_ref_counted_t)
#else
#define cachecef_base_ref_counted_tFields(a,b)
#define getcef_base_ref_counted_tFields(a,b,c) NULL
#define setcef_base_ref_counted_tFields(a,b,c)
#define cef_base_ref_counted_t_sizeof() 0
#endif

#ifndef NO_cef_browser_process_handler_t
void cachecef_browser_process_handler_tFields(JNIEnv *env, jobject lpObject);
cef_browser_process_handler_t *getcef_browser_process_handler_tFields(JNIEnv *env, jobject lpObject, cef_browser_process_handler_t *lpStruct);
void setcef_browser_process_handler_tFields(JNIEnv *env, jobject lpObject, cef_browser_process_handler_t *lpStruct);
#define cef_browser_process_handler_t_sizeof() sizeof(cef_browser_process_handler_t)
#else
#define cachecef_browser_process_handler_tFields(a,b)
#define getcef_browser_process_handler_tFields(a,b,c) NULL
#define setcef_browser_process_handler_tFields(a,b,c)
#define cef_browser_process_handler_t_sizeof() 0
#endif

#ifndef NO_cef_client_t
void cachecef_client_tFields(JNIEnv *env, jobject lpObject);
cef_client_t *getcef_client_tFields(JNIEnv *env, jobject lpObject, cef_client_t *lpStruct);
void setcef_client_tFields(JNIEnv *env, jobject lpObject, cef_client_t *lpStruct);
#define cef_client_t_sizeof() sizeof(cef_client_t)
#else
#define cachecef_client_tFields(a,b)
#define getcef_client_tFields(a,b,c) NULL
#define setcef_client_tFields(a,b,c)
#define cef_client_t_sizeof() 0
#endif

#ifndef NO_cef_context_menu_handler_t
void cachecef_context_menu_handler_tFields(JNIEnv *env, jobject lpObject);
cef_context_menu_handler_t *getcef_context_menu_handler_tFields(JNIEnv *env, jobject lpObject, cef_context_menu_handler_t *lpStruct);
void setcef_context_menu_handler_tFields(JNIEnv *env, jobject lpObject, cef_context_menu_handler_t *lpStruct);
#define cef_context_menu_handler_t_sizeof() sizeof(cef_context_menu_handler_t)
#else
#define cachecef_context_menu_handler_tFields(a,b)
#define getcef_context_menu_handler_tFields(a,b,c) NULL
#define setcef_context_menu_handler_tFields(a,b,c)
#define cef_context_menu_handler_t_sizeof() 0
#endif

#ifndef NO_cef_cookie_visitor_t
void cachecef_cookie_visitor_tFields(JNIEnv *env, jobject lpObject);
cef_cookie_visitor_t *getcef_cookie_visitor_tFields(JNIEnv *env, jobject lpObject, cef_cookie_visitor_t *lpStruct);
void setcef_cookie_visitor_tFields(JNIEnv *env, jobject lpObject, cef_cookie_visitor_t *lpStruct);
#define cef_cookie_visitor_t_sizeof() sizeof(cef_cookie_visitor_t)
#else
#define cachecef_cookie_visitor_tFields(a,b)
#define getcef_cookie_visitor_tFields(a,b,c) NULL
#define setcef_cookie_visitor_tFields(a,b,c)
#define cef_cookie_visitor_t_sizeof() 0
#endif

#ifndef NO_cef_display_handler_t
void cachecef_display_handler_tFields(JNIEnv *env, jobject lpObject);
cef_display_handler_t *getcef_display_handler_tFields(JNIEnv *env, jobject lpObject, cef_display_handler_t *lpStruct);
void setcef_display_handler_tFields(JNIEnv *env, jobject lpObject, cef_display_handler_t *lpStruct);
#define cef_display_handler_t_sizeof() sizeof(cef_display_handler_t)
#else
#define cachecef_display_handler_tFields(a,b)
#define getcef_display_handler_tFields(a,b,c) NULL
#define setcef_display_handler_tFields(a,b,c)
#define cef_display_handler_t_sizeof() 0
#endif

#ifndef NO_cef_focus_handler_t
void cachecef_focus_handler_tFields(JNIEnv *env, jobject lpObject);
cef_focus_handler_t *getcef_focus_handler_tFields(JNIEnv *env, jobject lpObject, cef_focus_handler_t *lpStruct);
void setcef_focus_handler_tFields(JNIEnv *env, jobject lpObject, cef_focus_handler_t *lpStruct);
#define cef_focus_handler_t_sizeof() sizeof(cef_focus_handler_t)
#else
#define cachecef_focus_handler_tFields(a,b)
#define getcef_focus_handler_tFields(a,b,c) NULL
#define setcef_focus_handler_tFields(a,b,c)
#define cef_focus_handler_t_sizeof() 0
#endif

#ifndef NO_cef_jsdialog_handler_t
void cachecef_jsdialog_handler_tFields(JNIEnv *env, jobject lpObject);
cef_jsdialog_handler_t *getcef_jsdialog_handler_tFields(JNIEnv *env, jobject lpObject, cef_jsdialog_handler_t *lpStruct);
void setcef_jsdialog_handler_tFields(JNIEnv *env, jobject lpObject, cef_jsdialog_handler_t *lpStruct);
#define cef_jsdialog_handler_t_sizeof() sizeof(cef_jsdialog_handler_t)
#else
#define cachecef_jsdialog_handler_tFields(a,b)
#define getcef_jsdialog_handler_tFields(a,b,c) NULL
#define setcef_jsdialog_handler_tFields(a,b,c)
#define cef_jsdialog_handler_t_sizeof() 0
#endif

#ifndef NO_cef_life_span_handler_t
void cachecef_life_span_handler_tFields(JNIEnv *env, jobject lpObject);
cef_life_span_handler_t *getcef_life_span_handler_tFields(JNIEnv *env, jobject lpObject, cef_life_span_handler_t *lpStruct);
void setcef_life_span_handler_tFields(JNIEnv *env, jobject lpObject, cef_life_span_handler_t *lpStruct);
#define cef_life_span_handler_t_sizeof() sizeof(cef_life_span_handler_t)
#else
#define cachecef_life_span_handler_tFields(a,b)
#define getcef_life_span_handler_tFields(a,b,c) NULL
#define setcef_life_span_handler_tFields(a,b,c)
#define cef_life_span_handler_t_sizeof() 0
#endif

#ifndef NO_cef_load_handler_t
void cachecef_load_handler_tFields(JNIEnv *env, jobject lpObject);
cef_load_handler_t *getcef_load_handler_tFields(JNIEnv *env, jobject lpObject, cef_load_handler_t *lpStruct);
void setcef_load_handler_tFields(JNIEnv *env, jobject lpObject, cef_load_handler_t *lpStruct);
#define cef_load_handler_t_sizeof() sizeof(cef_load_handler_t)
#else
#define cachecef_load_handler_tFields(a,b)
#define getcef_load_handler_tFields(a,b,c) NULL
#define setcef_load_handler_tFields(a,b,c)
#define cef_load_handler_t_sizeof() 0
#endif

#ifndef NO_cef_popup_features_t
void cachecef_popup_features_tFields(JNIEnv *env, jobject lpObject);
cef_popup_features_t *getcef_popup_features_tFields(JNIEnv *env, jobject lpObject, cef_popup_features_t *lpStruct);
void setcef_popup_features_tFields(JNIEnv *env, jobject lpObject, cef_popup_features_t *lpStruct);
#define cef_popup_features_t_sizeof() sizeof(cef_popup_features_t)
#else
#define cachecef_popup_features_tFields(a,b)
#define getcef_popup_features_tFields(a,b,c) NULL
#define setcef_popup_features_tFields(a,b,c)
#define cef_popup_features_t_sizeof() 0
#endif

#ifndef NO_cef_request_handler_t
void cachecef_request_handler_tFields(JNIEnv *env, jobject lpObject);
cef_request_handler_t *getcef_request_handler_tFields(JNIEnv *env, jobject lpObject, cef_request_handler_t *lpStruct);
void setcef_request_handler_tFields(JNIEnv *env, jobject lpObject, cef_request_handler_t *lpStruct);
#define cef_request_handler_t_sizeof() sizeof(cef_request_handler_t)
#else
#define cachecef_request_handler_tFields(a,b)
#define getcef_request_handler_tFields(a,b,c) NULL
#define setcef_request_handler_tFields(a,b,c)
#define cef_request_handler_t_sizeof() 0
#endif

#ifndef NO_cef_string_visitor_t
void cachecef_string_visitor_tFields(JNIEnv *env, jobject lpObject);
cef_string_visitor_t *getcef_string_visitor_tFields(JNIEnv *env, jobject lpObject, cef_string_visitor_t *lpStruct);
void setcef_string_visitor_tFields(JNIEnv *env, jobject lpObject, cef_string_visitor_t *lpStruct);
#define cef_string_visitor_t_sizeof() sizeof(cef_string_visitor_t)
#else
#define cachecef_string_visitor_tFields(a,b)
#define getcef_string_visitor_tFields(a,b,c) NULL
#define setcef_string_visitor_tFields(a,b,c)
#define cef_string_visitor_t_sizeof() 0
#endif

