xref: /onnv-gate/usr/src/cmd/filebench/common/vars.h (revision 7556:55f6926392fe)
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 
76*7556SAndrew.W.Wilson@sun.com #define	AVD_IS_RANDOM(vp)	((vp) && ((vp)->avd_type == AVD_IND_RANDVAR))
77*7556SAndrew.W.Wilson@sun.com #define	AVD_IS_STRING(vp)	((vp) && (((vp)->avd_type == AVD_VAL_STR) || \
78*7556SAndrew.W.Wilson@sun.com 				((vp)->avd_type == AVD_VARVAL_STR)))
795184Sek110237 
805184Sek110237 typedef struct var {
815184Sek110237 	char		*var_name;
825184Sek110237 	int		var_type;
835184Sek110237 	struct var	*var_next;
846212Saw148015 	union {
856212Saw148015 		boolean_t	boolean;
866212Saw148015 		fbint_t		integer;
876212Saw148015 		double		dbl_flt;
886212Saw148015 		char		*string;
896212Saw148015 		struct randdist *randptr;
906550Saw148015 		struct var	*varptr;
916212Saw148015 	} var_val;
925184Sek110237 } var_t;
935184Sek110237 
946212Saw148015 #define	VAR_TYPE_GLOBAL		0x00	/* global variable */
956212Saw148015 #define	VAR_TYPE_DYNAMIC	0x01	/* Dynamic variable */
966212Saw148015 #define	VAR_TYPE_RANDOM		0x02	/* random variable */
976550Saw148015 #define	VAR_TYPE_LOCAL		0x03	/* Local variable */
986212Saw148015 #define	VAR_TYPE_MASK		0x0f
996212Saw148015 #define	VAR_TYPE_BOOL_SET	0x10	/* var contains a boolean */
1006212Saw148015 #define	VAR_TYPE_INT_SET	0x20	/* var contains an integer */
1016212Saw148015 #define	VAR_TYPE_STR_SET	0x30	/* var contains a string */
1026212Saw148015 #define	VAR_TYPE_DBL_SET	0x40	/* var contains a double */
1036212Saw148015 #define	VAR_TYPE_RAND_SET	0x50	/* var contains a randdist pointer */
1046550Saw148015 #define	VAR_TYPE_INDVAR_SET	0x60    /* var points to another local var */
1056212Saw148015 #define	VAR_TYPE_SET_MASK	0xf0
1066212Saw148015 
1076212Saw148015 #define	VAR_HAS_BOOLEAN(vp) \
1086212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_BOOL_SET)
1096212Saw148015 
1106212Saw148015 #define	VAR_HAS_INTEGER(vp) \
1116212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_INT_SET)
1126212Saw148015 
1136212Saw148015 #define	VAR_HAS_DOUBLE(vp) \
1146212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_DBL_SET)
1156212Saw148015 
1166212Saw148015 #define	VAR_HAS_STRING(vp) \
1176212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_STR_SET)
1186212Saw148015 
1196212Saw148015 #define	VAR_HAS_RANDDIST(vp) \
1206212Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_RAND_SET)
1216212Saw148015 
1226550Saw148015 #define	VAR_HAS_INDVAR(vp) \
1236550Saw148015 	(((vp)->var_type & VAR_TYPE_SET_MASK) == VAR_TYPE_INDVAR_SET)
1246550Saw148015 
1256212Saw148015 #define	VAR_SET_BOOL(vp, val)	\
1266212Saw148015 	{			\
1276212Saw148015 		(vp)->var_val.boolean = (val); \
1286212Saw148015 		(vp)->var_type = \
1296212Saw148015 		(((vp)->var_type & (~VAR_TYPE_SET_MASK)) | VAR_TYPE_BOOL_SET);\
1306212Saw148015 	}
1315184Sek110237 
1326212Saw148015 #define	VAR_SET_INT(vp, val)	\
1336212Saw148015 	{			\
1346212Saw148015 		(vp)->var_val.integer = (val); \
1356212Saw148015 		(vp)->var_type = \
1366212Saw148015 		(((vp)->var_type & (~VAR_TYPE_SET_MASK)) | VAR_TYPE_INT_SET); \
1376212Saw148015 	}
1386212Saw148015 
1396212Saw148015 #define	VAR_SET_DBL(vp, val)	\
1406212Saw148015 	{			\
1416212Saw148015 		(vp)->var_val.dbl_flt = (val); \
1426212Saw148015 		(vp)->var_type = \
1436550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1446550Saw148015 		    VAR_TYPE_DBL_SET); \
1456212Saw148015 	}
1466212Saw148015 
1476212Saw148015 #define	VAR_SET_STR(vp, val)	\
1486212Saw148015 	{			\
1496212Saw148015 		(vp)->var_val.string = (val); \
1506212Saw148015 		(vp)->var_type = \
1516550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1526550Saw148015 		    VAR_TYPE_STR_SET); \
1536212Saw148015 	}
1546212Saw148015 
1556212Saw148015 #define	VAR_SET_RAND(vp, val)	\
1566212Saw148015 	{			\
1576212Saw148015 		(vp)->var_val.randptr = (val); \
1586212Saw148015 		(vp)->var_type = \
1596550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1606550Saw148015 		    VAR_TYPE_RAND_SET); \
1616550Saw148015 	}
1626550Saw148015 
1636550Saw148015 #define	VAR_SET_INDVAR(vp, val)	\
1646550Saw148015 	{			\
1656550Saw148015 		(vp)->var_val.varptr = (val); \
1666550Saw148015 		(vp)->var_type = \
1676550Saw148015 		    (((vp)->var_type & (~VAR_TYPE_SET_MASK)) | \
1686550Saw148015 		    VAR_TYPE_INDVAR_SET); \
1696212Saw148015 	}
1706212Saw148015 
1716212Saw148015 avd_t avd_bool_alloc(boolean_t bool);
1726212Saw148015 avd_t avd_int_alloc(fbint_t integer);
1736212Saw148015 avd_t avd_str_alloc(char *string);
1746550Saw148015 boolean_t avd_get_bool(avd_t);
1756550Saw148015 fbint_t avd_get_int(avd_t);
1766550Saw148015 double avd_get_dbl(avd_t);
1776550Saw148015 char *avd_get_str(avd_t);
1786550Saw148015 void avd_update(avd_t *avdp, var_t *lvar_list);
1796212Saw148015 avd_t var_ref_attr(char *name);
1806212Saw148015 int var_assign_boolean(char *name, boolean_t bool);
1816212Saw148015 int var_assign_integer(char *name, fbint_t integer);
1826550Saw148015 int var_assign_double(char *name, double dbl);
1835184Sek110237 int var_assign_string(char *name, char *string);
1845184Sek110237 int var_assign_var(char *name, char *string);
1856550Saw148015 void var_update_comp_lvars(var_t *newlvar, var_t *proto_comp_vars,
1866550Saw148015     var_t *mstr_lvars);
1876212Saw148015 var_t *var_define_randvar(char *name);
1886212Saw148015 var_t *var_find_randvar(char *name);
1896212Saw148015 boolean_t var_to_boolean(char *name);
1906212Saw148015 fbint_t var_to_integer(char *name);
1916550Saw148015 var_t *var_lvar_alloc_local(char *name);
1926550Saw148015 var_t *var_lvar_assign_boolean(char *name, boolean_t);
1936550Saw148015 var_t *var_lvar_assign_integer(char *name, fbint_t);
1946550Saw148015 var_t *var_lvar_assign_double(char *name, double);
1956550Saw148015 var_t *var_lvar_assign_string(char *name, char *string);
1966550Saw148015 var_t *var_lvar_assign_var(char *name, char *src_name);
1975184Sek110237 char *var_to_string(char *name);
1986212Saw148015 char *var_randvar_to_string(char *name, int param);
1996212Saw148015 int var_is_set4_randvar(char *name);
2005184Sek110237 
2015184Sek110237 #ifdef	__cplusplus
2025184Sek110237 }
2035184Sek110237 #endif
2045184Sek110237 
2055184Sek110237 #endif	/* _FB_VARS_H */
206