xref: /onnv-gate/usr/src/cmd/filebench/common/vars.h (revision 7946:36d7e7afa9fa)
15184Sek110237 /*
25184Sek110237  * CDDL HEADER START
35184Sek110237  *
45184Sek110237  * The contents of this file are subject to the terms of the
55184Sek110237  * Common Development and Distribution License (the "License").
65184Sek110237  * You may not use this file except in compliance with the License.
75184Sek110237  *
85184Sek110237  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95184Sek110237  * or http://www.opensolaris.org/os/licensing.
105184Sek110237  * See the License for the specific language governing permissions
115184Sek110237  * and limitations under the License.
125184Sek110237  *
135184Sek110237  * When distributing Covered Code, include this CDDL HEADER in each
145184Sek110237  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155184Sek110237  * If applicable, add the following below this CDDL HEADER, with the
165184Sek110237  * fields enclosed by brackets "[]" replaced with your own identifying
175184Sek110237  * information: Portions Copyright [yyyy] [name of copyright owner]
185184Sek110237  *
195184Sek110237  * CDDL HEADER END
205184Sek110237  */
215184Sek110237 /*
226212Saw148015  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
235184Sek110237  * Use is subject to license terms.
245184Sek110237  */
255184Sek110237 
265184Sek110237 #ifndef _FB_VARS_H
275184Sek110237 #define	_FB_VARS_H
285184Sek110237 
295184Sek110237 #include "config.h"
305184Sek110237 
315184Sek110237 #include <stdio.h>
325184Sek110237 #include <sys/types.h>
335184Sek110237 #ifdef HAVE_STDINT_H
345184Sek110237 #include <stdint.h>
355184Sek110237 #endif
365184Sek110237 
375184Sek110237 #ifdef	__cplusplus
385184Sek110237 extern "C" {
395184Sek110237 #endif
405184Sek110237 
416212Saw148015 /* Attribute Value Descriptor types */
426212Saw148015 typedef enum avd_type {
436212Saw148015 	AVD_INVALID = 0,	/* avd is empty */
446212Saw148015 	AVD_VAL_BOOL,		/* avd contains a boolean_t */
456212Saw148015 	AVD_VARVAL_BOOL,	/* avd points to the boolean_t in a var_t */
466212Saw148015 	AVD_VAL_INT,		/* avd contains an fbint_t */
476212Saw148015 	AVD_VARVAL_INT,		/* avd points to the fbint_t in a var_t */
486212Saw148015 	AVD_VAL_STR,		/* avd contains a sting (*char) */
496212Saw148015 	AVD_VARVAL_STR,		/* avd points to a string in a var_t */
506212Saw148015 	AVD_VAL_DBL,		/* avd contains a double float */
516212Saw148015 	AVD_VARVAL_DBL,		/* avd points to the double in a var_t */
526212Saw148015 	AVD_IND_VAR,		/* avd points a var_t */
536212Saw148015 	AVD_IND_RANDVAR		/* avd points to the randdist_t associated */
546212Saw148015 				/* with a random type var_t */
556212Saw148015 } avd_type_t;
566212Saw148015 
576212Saw148015 typedef uint64_t fbint_t;
586212Saw148015 
596212Saw148015 /* Attribute Value Descriptor */
606212Saw148015 typedef struct avd {
616212Saw148015 	avd_type_t  avd_type;
626212Saw148015 	union {
636212Saw148015 		boolean_t	boolval;
646212Saw148015 		boolean_t	*boolptr;
656212Saw148015 		fbint_t		intval;
666212Saw148015 		fbint_t		*intptr;
676212Saw148015 		double		dblval;
686212Saw148015 		double		*dblptr;
696212Saw148015 		char		*strval;
706212Saw148015 		char		**strptr;
716212Saw148015 		struct randdist *randptr;
726212Saw148015 		struct var	*varptr;
736212Saw148015 	} avd_val;
746212Saw148015 } *avd_t;
756212Saw148015 
767556SAndrew.W.Wilson@sun.com #define	AVD_IS_RANDOM(vp)	((vp) && ((vp)->avd_type == AVD_IND_RANDVAR))
777556SAndrew.W.Wilson@sun.com #define	AVD_IS_STRING(vp)	((vp) && (((vp)->avd_type == AVD_VAL_STR) || \
787556SAndrew.W.Wilson@sun.com 				((vp)->avd_type == AVD_VARVAL_STR)))
79*7946SAndrew.W.Wilson@sun.com #define	AVD_IS_VAR(vp)		((vp) && (((vp)->avd_type == AVD_IND_VAR) || \
80*7946SAndrew.W.Wilson@sun.com 				((vp)->avd_type == AVD_VARVAL_INT) || \
81*7946SAndrew.W.Wilson@sun.com 				((vp)->avd_type == AVD_VARVAL_DBL)))
825184Sek110237 
835184Sek110237 typedef struct var {
845184Sek110237 	char		*var_name;
855184Sek110237 	int		var_type;
865184Sek110237 	struct var	*var_next;
876212Saw148015 	union {
886212Saw148015 		boolean_t	boolean;
896212Saw148015 		fbint_t		integer;
906212Saw148015 		double		dbl_flt;
916212Saw148015 		char		*string;
926212Saw148015 		struct randdist *randptr;
936550Saw148015 		struct var	*varptr;
946212Saw148015 	} var_val;
955184Sek110237 } var_t;
965184Sek110237 
976212Saw148015 #define	VAR_TYPE_GLOBAL		0x00	/* global variable */
986212Saw148015 #define	VAR_TYPE_DYNAMIC	0x01	/* Dynamic variable */
996212Saw148015 #define	VAR_TYPE_RANDOM		0x02	/* random variable */
1006550Saw148015 #define	VAR_TYPE_LOCAL		0x03	/* Local variable */
1016212Saw148015 #define	VAR_TYPE_MASK		0x0f
1026212Saw148015 #define	VAR_TYPE_BOOL_SET	0x10	/* var contains a boolean */
1036212Saw148015 #define	VAR_TYPE_INT_SET	0x20	/* var contains an integer */
1046212Saw148015 #define	VAR_TYPE_STR_SET	0x30	/* var contains a string */
1056212Saw148015 #define	VAR_TYPE_DBL_SET	0x40	/* var contains a double */
1066212Saw148015 #define	VAR_TYPE_RAND_SET	0x50	/* var contains a randdist pointer */
1076550Saw148015 #define	VAR_TYPE_INDVAR_SET	0x60    /* var points to another local var */
1086212Saw148015 #define	VAR_TYPE_SET_MASK	0xf0
1096212Saw148015 
1106212Saw148015 #define	VAR_HAS_BOOLEAN(vp) \
1116212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_BOOL_SET)
1126212Saw148015 
1136212Saw148015 #define	VAR_HAS_INTEGER(vp) \
1146212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_INT_SET)
1156212Saw148015 
1166212Saw148015 #define	VAR_HAS_DOUBLE(vp) \
1176212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_DBL_SET)
1186212Saw148015 
1196212Saw148015 #define	VAR_HAS_STRING(vp) \
1206212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_STR_SET)
1216212Saw148015 
1226212Saw148015 #define	VAR_HAS_RANDDIST(vp) \
1236212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_RAND_SET)
1246212Saw148015 
1256550Saw148015 #define	VAR_HAS_INDVAR(vp) \
1266550Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_INDVAR_SET)
1276550Saw148015 
1286212Saw148015 #define	VAR_SET_BOOL(vp, val)	\
1296212Saw148015 	{			\
1306212Saw148015 		(vp)->var_val.boolean = (val); \
1316212Saw148015 		(vp)->var_type = \
1326212Saw148015 		(((vp)->var_type & (~VAR_TYPE_SET_MASK)) | VAR_TYPE_BOOL_SET);\
1336212Saw148015 	}
1345184Sek110237 
1356212Saw148015 #define	VAR_SET_INT(vp, val)	\
1366212Saw148015 	{			\
1376212Saw148015 		(vp)->var_val.integer = (val); \
1386212Saw148015 		(vp)->var_type = \
1396212Saw148015 		(((vp)->var_type & (~VAR_TYPE_SET_MASK)) | VAR_TYPE_INT_SET); \
1406212Saw148015 	}
1416212Saw148015 
1426212Saw148015 #define	VAR_SET_DBL(vp, val)	\
1436212Saw148015 	{			\
1446212Saw148015 		(vp)->var_val.dbl_flt = (val); \
1456212Saw148015 		(vp)->var_type = \
1466550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1476550Saw148015 		    VAR_TYPE_DBL_SET); \
1486212Saw148015 	}
1496212Saw148015 
1506212Saw148015 #define	VAR_SET_STR(vp, val)	\
1516212Saw148015 	{			\
1526212Saw148015 		(vp)->var_val.string = (val); \
1536212Saw148015 		(vp)->var_type = \
1546550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1556550Saw148015 		    VAR_TYPE_STR_SET); \
1566212Saw148015 	}
1576212Saw148015 
1586212Saw148015 #define	VAR_SET_RAND(vp, val)	\
1596212Saw148015 	{			\
1606212Saw148015 		(vp)->var_val.randptr = (val); \
1616212Saw148015 		(vp)->var_type = \
1626550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1636550Saw148015 		    VAR_TYPE_RAND_SET); \
1646550Saw148015 	}
1656550Saw148015 
1666550Saw148015 #define	VAR_SET_INDVAR(vp, val)	\
1676550Saw148015 	{			\
1686550Saw148015 		(vp)->var_val.varptr = (val); \
1696550Saw148015 		(vp)->var_type = \
1706550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1716550Saw148015 		    VAR_TYPE_INDVAR_SET); \
1726212Saw148015 	}
1736212Saw148015 
1746212Saw148015 avd_t avd_bool_alloc(boolean_t bool);
1756212Saw148015 avd_t avd_int_alloc(fbint_t integer);
1766212Saw148015 avd_t avd_str_alloc(char *string);
1776550Saw148015 boolean_t avd_get_bool(avd_t);
1786550Saw148015 fbint_t avd_get_int(avd_t);
1796550Saw148015 double avd_get_dbl(avd_t);
1806550Saw148015 char *avd_get_str(avd_t);
1816550Saw148015 void avd_update(avd_t *avdp, var_t *lvar_list);
1826212Saw148015 avd_t var_ref_attr(char *name);
1836212Saw148015 int var_assign_boolean(char *name, boolean_t bool);
1846212Saw148015 int var_assign_integer(char *name, fbint_t integer);
1856550Saw148015 int var_assign_double(char *name, double dbl);
1865184Sek110237 int var_assign_string(char *name, char *string);
1875184Sek110237 int var_assign_var(char *name, char *string);
1886550Saw148015 void var_update_comp_lvars(var_t *newlvar, var_t *proto_comp_vars,
1896550Saw148015     var_t *mstr_lvars);
1906212Saw148015 var_t *var_define_randvar(char *name);
1916212Saw148015 var_t *var_find_randvar(char *name);
1926212Saw148015 boolean_t var_to_boolean(char *name);
1936212Saw148015 fbint_t var_to_integer(char *name);
1946550Saw148015 var_t *var_lvar_alloc_local(char *name);
1956550Saw148015 var_t *var_lvar_assign_boolean(char *name, boolean_t);
1966550Saw148015 var_t *var_lvar_assign_integer(char *name, fbint_t);
1976550Saw148015 var_t *var_lvar_assign_double(char *name, double);
1986550Saw148015 var_t *var_lvar_assign_string(char *name, char *string);
1996550Saw148015 var_t *var_lvar_assign_var(char *name, char *src_name);
2005184Sek110237 char *var_to_string(char *name);
2016212Saw148015 char *var_randvar_to_string(char *name, int param);
2026212Saw148015 int var_is_set4_randvar(char *name);
2035184Sek110237 
2045184Sek110237 #ifdef	__cplusplus
2055184Sek110237 }
2065184Sek110237 #endif
2075184Sek110237 
2085184Sek110237 #endif	/* _FB_VARS_H */
209