* dev.c dev.h: Moved defunct first_device() and next_device()

to devlist.c

	* devlist.c, devlist.h: Another step towards
	dynamically loadable devices.  The first_device() and
	next_device() functions abstract away the actual
	implementation of the devices list.  Currently it is a fixed
	length array, when we start supporting dynamically loaded devices,
	this is no longer true.

	* test_devlist.c: Checks the implementation of first_device()
        and next_device().

	* Makefile.am, .cvsignore: Updates for new files.
This commit is contained in:
arno 2000-07-07 12:33:24 +00:00
parent f1953e2885
commit 14acefd969
8 changed files with 197 additions and 27 deletions

View File

@ -1,3 +1,5 @@
Makefile.in
Makefile
.deps
.libs
test_devlist

View File

@ -1,3 +1,15 @@
2000-07-07 Arno W. Peters <A.W.Peters@ieee.org>
* devlist.c, devlist.h: Another step towards
dynamically loadable devices. The first_device() and
next_device() functions abstract away the actual
implementation of the devices list. Currently it is a fixed
length array, when we start supporting dynamically loaded devices,
this is no longer true.
* test_devlist.c: Checks the implementation of first_device()
and next_device().
2000-04-04 Paolo Nenzi <p.nenzi@ieee.org>
* Makefile.am: Added support for BSIM4

View File

@ -37,6 +37,8 @@ lib_LIBRARIES = libdev.a
libdev_a_SOURCES = \
dev.c \
dev.h \
devlist.c \
devlist.h \
devsup.c \
cktaccept.c \
cktaccept.h \
@ -46,6 +48,15 @@ libdev_a_SOURCES = \
cktfinddev.c \
cktinit.c
bin_PROGRAMS = test_devlist
test_devlist_SOURCES = \
devlist.c \
devlist.h \
test_devlist.c
TESTS = test_devlist
EXTRA_DIST = README
INCLUDES = -I$(top_srcdir)/src/include

View File

@ -173,28 +173,3 @@ devices(void)
}
/* Returns the first device in the list, or NULL if the list is empty */
SPICEdev *
first_device(void)
{
return DEVices[0];
}
/* Returns the next device on the list, or NULL if no more devices
left. */
SPICEdev *
next_device(SPICEdev *current)
{
SPICEdev *ret;
int index;
index = (current - first_device()) / sizeof(SPICEdev *);
if (index < num_devices()) {
ret = DEVices[index + 1];
} else {
ret = NULL;
}
return ret;
}

View File

@ -5,8 +5,6 @@
int num_devices(void);
IFdevice **devices_ptr(void);
SPICEdev **devices(void);
SPICEdev *first_device(void);
SPICEdev *next_device(SPICEdev *current);
#endif

View File

@ -0,0 +1,64 @@
/* NG-SPICE -- An electrical circuit simulator
*
* Copyright (c) 1990 University of California
* Copyright (c) 2000 Arno W. Peters
*
* Permission to use, copy, modify, and distribute this software and
* its documentation without fee, and without a written agreement is
* hereby granted, provided that the above copyright notice, this
* paragraph and the following three paragraphs appear in all copies.
*
* This software program and documentation are copyrighted by their
* authors. The software program and documentation are supplied "as
* is", without any accompanying services from the authors. The
* authors do not warrant that the operation of the program will be
* uninterrupted or error-free. The end-user understands that the
* program was developed for research purposes and is advised not to
* rely exclusively on the program for any reason.
*
* IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
* LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
* DOCUMENTATION, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. THE AUTHORS SPECIFICALLY DISCLAIMS ANY
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
* SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS
* HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS. */
#include <config.h>
#include <devdefs.h>
#include <ifsim.h>
#include "dev.h"
/* Returns the first device in the list, or NULL if the list is empty */
SPICEdev **
first_device(void)
{
return devices();
}
/* Returns the next device on the list, or NULL if no more devices
left. */
SPICEdev **
next_device(SPICEdev **current)
{
int index;
SPICEdev **ret;
index = (current - devices())/sizeof(SPICEdev *);
printf("index: %d\n", index);
if (index < num_devices()) {
ret = current + sizeof(SPICEdev *);
} else {
ret = NULL;
}
return ret;
}

View File

@ -0,0 +1,35 @@
/* NG-SPICE -- An electrical circuit simulator
*
* Copyright (c) 2000 Arno W. Peters
*
* Permission to use, copy, modify, and distribute this software and
* its documentation without fee, and without a written agreement is
* hereby granted, provided that the above copyright notice, this
* paragraph and the following three paragraphs appear in all copies.
*
* This software program and documentation are copyrighted by their
* authors. The software program and documentation are supplied "as
* is", without any accompanying services from the authors. The
* authors do not warrant that the operation of the program will be
* uninterrupted or error-free. The end-user understands that the
* program was developed for research purposes and is advised not to
* rely exclusively on the program for any reason.
*
* IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
* LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
* DOCUMENTATION, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. THE AUTHORS SPECIFICALLY DISCLAIMS ANY
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
* SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS
* HAVE NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS. */
#ifndef _DEVLIST_H
#define _DEVLIST_H
SPICEdev **first_device(void);
SPICEdev **next_device(SPICEdev **current);
#endif

View File

@ -0,0 +1,73 @@
#include <stdio.h>
#include <stdlib.h>
#include <ifsim.h>
#include <devdefs.h>
#include "devlist.h"
SPICEdev dummy = {
{
"Dummy",
"A dummy element",
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
0
},
NULL,
};
SPICEdev *DEVices[] = {
&dummy,
&dummy,
&dummy,
&dummy
};
int
num_devices(void)
{
return sizeof(DEVices)/sizeof(SPICEdev *);
}
SPICEdev **
devices(void)
{
return DEVices;
}
int
main(void)
{
SPICEdev **dev;
int count = 0;
int ret;
for (dev = first_device(); dev != NULL; dev = next_device(dev)) {
printf("count: %d\n", count);
count++;
}
if (count == num_devices() + 1) {
printf("PASSED");
ret = EXIT_SUCCESS;
} else {
printf("FAILED");
ret = EXIT_FAILURE;
}
printf(": test_dev\n");
return ret;
}