HEX
Server: nginx/1.28.3
System: Linux ip-172-31-12-242 6.17.0-1007-aws #7~24.04.1-Ubuntu SMP Thu Jan 22 21:04:49 UTC 2026 x86_64
User: root (0)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: //usr/src/linux-headers-7.0.0-1009-aws/include/rv/automata.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2019-2022 Red Hat, Inc. Daniel Bristot de Oliveira  <bristot@kernel.org>
 *
 * Deterministic automata helper functions, to be used with the automata
 * models in C generated by the dot2k tool.
 */

#ifndef _RV_AUTOMATA_H
#define _RV_AUTOMATA_H

#ifndef MONITOR_NAME
#error "MONITOR_NAME macro is not defined. Did you include $(MODEL_NAME).h generated by rvgen?"
#endif

#define RV_AUTOMATON_NAME CONCATENATE(automaton_, MONITOR_NAME)
#define EVENT_MAX CONCATENATE(event_max_, MONITOR_NAME)
#define STATE_MAX CONCATENATE(state_max_, MONITOR_NAME)
#define events CONCATENATE(events_, MONITOR_NAME)
#define states CONCATENATE(states_, MONITOR_NAME)

/*
 * model_get_state_name - return the (string) name of the given state
 */
static char *model_get_state_name(enum states state)
{
	if ((state < 0) || (state >= STATE_MAX))
		return "INVALID";

	return RV_AUTOMATON_NAME.state_names[state];
}

/*
 * model_get_event_name - return the (string) name of the given event
 */
static char *model_get_event_name(enum events event)
{
	if ((event < 0) || (event >= EVENT_MAX))
		return "INVALID";

	return RV_AUTOMATON_NAME.event_names[event];
}

/*
 * model_get_initial_state - return the automaton's initial state
 */
static inline enum states model_get_initial_state(void)
{
	return RV_AUTOMATON_NAME.initial_state;
}

/*
 * model_get_next_state - process an automaton event occurrence
 *
 * Given the current state (curr_state) and the event (event), returns
 * the next state, or INVALID_STATE in case of error.
 */
static inline enum states model_get_next_state(enum states curr_state,
					enum events event)
{
	if ((curr_state < 0) || (curr_state >= STATE_MAX))
		return INVALID_STATE;

	if ((event < 0) || (event >= EVENT_MAX))
		return INVALID_STATE;

	return RV_AUTOMATON_NAME.function[curr_state][event];
}

/*
 * model_is_final_state - check if the given state is a final state
 */
static inline bool model_is_final_state(enum states state)
{
	if ((state < 0) || (state >= STATE_MAX))
		return 0;

	return RV_AUTOMATON_NAME.final_states[state];
}

#endif