/*******************************************************************************
 * Copyright (c) 2000, 2021 IBM Corporation and others.
 *
 * 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:
 *    IBM Corporation - initial API and implementation
 *******************************************************************************/

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

#include "swt.h"
#include "gtk4_stats.h"

#ifdef NATIVE_STATS

char * GTK4_nativeFunctionNames[] = {
	"gdk_1content_1formats_1builder_1add_1mime_1type",
	"gdk_1content_1formats_1builder_1free_1to_1formats",
	"gdk_1content_1formats_1builder_1new",
	"gdk_1toplevel_1focus",
	"gdk_1toplevel_1get_1state",
	"gdk_1toplevel_1lower",
	"gdk_1toplevel_1set_1icon_1list",
	"gtk_1box_1append",
	"gtk_1box_1insert_1child_1after",
	"gtk_1box_1prepend",
	"gtk_1button_1new_1from_1icon_1name",
	"gtk_1button_1set_1child",
	"gtk_1calendar_1get_1date",
	"gtk_1calendar_1select_1day",
	"gtk_1calendar_1set_1show_1day_1names",
	"gtk_1calendar_1set_1show_1heading",
	"gtk_1calendar_1set_1show_1week_1numbers",
	"gtk_1check_1button_1get_1active",
	"gtk_1check_1button_1set_1active",
	"gtk_1check_1button_1set_1group",
	"gtk_1check_1button_1set_1inconsistent",
	"gtk_1check_1button_1set_1use_1underline",
	"gtk_1drag_1source_1new",
	"gtk_1drag_1source_1set_1actions",
	"gtk_1drag_1source_1set_1icon",
	"gtk_1drop_1target_1async_1new",
	"gtk_1drop_1target_1async_1set_1formats",
	"gtk_1file_1chooser_1get_1file",
	"gtk_1file_1chooser_1get_1files",
	"gtk_1file_1chooser_1set_1current_1folder",
	"gtk_1file_1chooser_1set_1file",
	"gtk_1hsv_1to_1rgb",
	"gtk_1icon_1paintable_1get_1file",
	"gtk_1icon_1theme_1get_1for_1display",
	"gtk_1icon_1theme_1lookup_1icon",
	"gtk_1im_1context_1filter_1keypress",
	"gtk_1init_1check",
	"gtk_1keyval_1trigger_1new",
	"gtk_1named_1action_1new",
	"gtk_1native_1get_1surface",
	"gtk_1picture_1new",
	"gtk_1picture_1set_1can_1shrink",
	"gtk_1picture_1set_1paintable",
	"gtk_1popover_1menu_1bar_1new_1from_1model",
	"gtk_1popover_1menu_1new_1from_1model_1full",
	"gtk_1popover_1menu_1set_1menu_1model",
	"gtk_1popover_1set_1has_1arrow",
	"gtk_1rgb_1to_1hsv",
	"gtk_1scrolled_1window_1get_1has_1frame",
	"gtk_1scrolled_1window_1new",
	"gtk_1scrolled_1window_1set_1child",
	"gtk_1scrolled_1window_1set_1has_1frame",
	"gtk_1shortcut_1controller_1add_1shortcut",
	"gtk_1shortcut_1controller_1new",
	"gtk_1shortcut_1controller_1remove_1shortcut",
	"gtk_1shortcut_1controller_1set_1scope",
	"gtk_1shortcut_1new",
	"gtk_1text_1get_1buffer",
	"gtk_1window_1destroy",
	"gtk_1window_1get_1icon_1name",
	"gtk_1window_1minimize",
	"gtk_1window_1new",
	"gtk_1window_1set_1child",
	"gtk_1window_1set_1default_1widget",
	"gtk_1window_1set_1icon_1name",
	"gtk_1window_1unminimize",
};
#define NATIVE_FUNCTION_COUNT sizeof(GTK4_nativeFunctionNames) / sizeof(char*)
int GTK4_nativeFunctionCount = NATIVE_FUNCTION_COUNT;
int GTK4_nativeFunctionCallCount[NATIVE_FUNCTION_COUNT];

#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func

JNIEXPORT jint JNICALL STATS_NATIVE(GTK4_1GetFunctionCount)
	(JNIEnv *env, jclass that)
{
	return GTK4_nativeFunctionCount;
}

JNIEXPORT jstring JNICALL STATS_NATIVE(GTK4_1GetFunctionName)
	(JNIEnv *env, jclass that, jint index)
{
	return (*env)->NewStringUTF(env, GTK4_nativeFunctionNames[index]);
}

JNIEXPORT jint JNICALL STATS_NATIVE(GTK4_1GetFunctionCallCount)
	(JNIEnv *env, jclass that, jint index)
{
	return GTK4_nativeFunctionCallCount[index];
}

#endif
