Permanent allocate vpiSignals more efficiently.

This commit is contained in:
steve 2003-02-16 23:40:05 +00:00
parent a94ca97d36
commit 74192632fa
1 changed files with 23 additions and 80 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001 Stephen Williams (steve@icarus.com)
* Copyright (c) 2001-2003 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CVS_IDENT
#ident "$Id: vpi_signal.cc,v 1.52 2003/02/09 23:33:26 steve Exp $"
#ident "$Id: vpi_signal.cc,v 1.53 2003/02/16 23:40:05 steve Exp $"
#endif
/*
@ -735,6 +735,23 @@ vpiHandle vpip_make_reg(const char*name, int msb, int lsb,
return obj;
}
static struct __vpiSignal* allocate_vpiSignal(void)
{
static struct __vpiSignal*alloc_array = 0;
static unsigned alloc_index = 0;
const unsigned alloc_count = 512;
if ((alloc_array == 0) || (alloc_index == alloc_count)) {
alloc_array = (struct __vpiSignal*)
calloc(alloc_count, sizeof(struct __vpiSignal));
alloc_index = 0;
}
struct __vpiSignal*cur = alloc_array + alloc_index;
alloc_index += 1;
return cur;
}
/*
* Construct a vpiNet object. Give the object specified dimensions,
* and point to the specified functor for the lsb.
@ -742,8 +759,7 @@ vpiHandle vpip_make_reg(const char*name, int msb, int lsb,
vpiHandle vpip_make_net(const char*name, int msb, int lsb,
bool signed_flag, vvp_fvector_t vec)
{
struct __vpiSignal*obj = (struct __vpiSignal*)
malloc(sizeof(struct __vpiSignal));
struct __vpiSignal*obj = allocate_vpiSignal();
obj->base.vpi_type = &vpip_net_rt;
obj->name = vpip_string(name);
obj->msb = msb;
@ -763,6 +779,9 @@ vpiHandle vpip_make_net(const char*name, int msb, int lsb,
/*
* $Log: vpi_signal.cc,v $
* Revision 1.53 2003/02/16 23:40:05 steve
* Permanent allocate vpiSignals more efficiently.
*
* Revision 1.52 2003/02/09 23:33:26 steve
* Spelling fixes.
*
@ -788,80 +807,4 @@ vpiHandle vpip_make_net(const char*name, int msb, int lsb,
*
* Revision 1.45 2002/07/23 15:11:41 steve
* integral type/ptrdiff_t warning.
*
* Revision 1.44 2002/07/23 02:36:34 steve
* Careful not to overrun vector buffer.
*
* Revision 1.43 2002/07/19 00:36:36 steve
* Support put of wide vpiVectorVal to signal.
*
* Revision 1.42 2002/07/09 03:24:37 steve
* Dynamic resizevpi result buf in more places.
*
* Revision 1.41 2002/07/05 17:14:15 steve
* Names of vpi objects allocated as vpip_strings.
*
* Revision 1.40 2002/07/05 02:50:58 steve
* Remove the vpi object symbol table after compile.
*
* Revision 1.39 2002/07/03 23:39:57 steve
* Dynamic size result buffer for _str and _get_value functions.
*
* Revision 1.38 2002/07/03 23:16:27 steve
* don't pollute name space
* fix vecval for Z/X cases
*
* Revision 1.37 2002/07/03 02:09:38 steve
* vpiName, vpiFullName support in memory types,
* length checks for *_get_str() buffers,
* temporary buffers for *_get_str() data,
* dynamic storage for vpi_get_data() in memory types
* shared with signal white space
*
* Revision 1.36 2002/06/30 02:52:36 steve
* vpiVectorVal of very wide signals.
*
* Revision 1.35 2002/06/21 04:58:55 steve
* Add support for special integer vectors.
*
* Revision 1.34 2002/05/15 04:48:46 steve
* Support set by string for reg objects.
*
* Revision 1.33 2002/02/03 01:01:51 steve
* Use Larrys bits-to-decimal-string code.
*
* Revision 1.32 2002/01/09 03:29:12 steve
* String prints of non-round vectors (PR378)
*
* Revision 1.31 2001/12/18 05:31:54 steve
* Remove result length restrictions for vpi_get_value.
*
* Revision 1.30 2001/12/06 03:31:25 steve
* Support functor delays for gates and UDP devices.
* (Stephan Boettcher)
*
* Revision 1.29 2001/11/07 03:34:42 steve
* Use functor pointers where vvp_ipoint_t is unneeded.
*
* Revision 1.28 2001/10/31 04:27:47 steve
* Rewrite the functor type to have fewer functor modes,
* and use objects to manage the different types.
* (Stephan Boettcher)
*
* Revision 1.27 2001/10/18 04:52:31 steve
* Support vpiVectorVal for signals. (Philip Blundell)
*
* Revision 1.26 2001/10/15 01:49:50 steve
* Support getting scope of scope, and scope of signals.
*
* Revision 1.25 2001/09/30 05:18:46 steve
* Reduce VCD output by removing duplicates. (Stephan Boettcher)
*
* Revision 1.24 2001/09/15 18:27:05 steve
* Make configure detect malloc.h
*
* Revision 1.23 2001/08/09 19:38:23 steve
* Nets (wires) do not use their own functors.
* Modifications to propagation of values.
* (Stephan Boettcher)
*/