Files
geant4/source/geometry/solids/STEP/src/sdaiEntity_extent_set.cc
T
2016-06-08 15:42:07 +02:00

328 lines
7.3 KiB
C++

/*
* Copyright (c) 1990, 1991 Stanford University
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Stanford not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. Stanford makes no representations about
* the suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
* IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* UArray implementation.
*/
//#include "/proj/pdevel/autoc/arch.sunCC.iv/scl_cf.h"
// This is an scl configuration file generated by the configure script
// generated using gnu's autoconf
#ifdef HAVE_CONFIG_H
#include <scl_cf.h>
#endif
#include <memory.h>
#include <math.h>
#include <sdai.h>
/*
#include <EntityExtent.h>
#include <EntityExtentSet.h>
*/
// to help ObjectCenter
#ifndef HAVE_MEMMOVE
extern "C"
{
void * memmove(void *__s1, const void *__s2, size_t __n);
}
#endif
/*****************************************************************************/
SCLP23(Entity_extent__set)::SCLP23_NAME(Entity_extent__set) (int defaultSize)
#ifdef __OSTORE__
// : _rep(os_Collection<Entity_extent_ptr>::create(os_database::of(this)) ),
: _rep(os_List<SCLP23(Entity_extent_ptr)>::create(os_database::of(this)) ),
_cursor(_rep),
_first(SCLBOOL(BTrue))
{
// _rep = os_Set<Entity_extent_ptr>::create(os_database::of(this));
}
#else
{
_bufsize = defaultSize;
_buf = new SCLP23(Entity_extent_ptr)[_bufsize];
_count = 0;
}
#endif
SCLP23(Entity_extent__set)::~SCLP23_NAME(Entity_extent__set) ()
{
#ifndef __OSTORE__
delete _buf;
#endif
}
void SCLP23(Entity_extent__set)::Check (int index) {
#ifdef __OSTORE__
#else
SCLP23(Entity_extent_ptr)* newbuf;
if (index >= _bufsize) {
_bufsize = (index+1) * 2;
newbuf = new SCLP23(Entity_extent_ptr)[_bufsize];
memmove(newbuf, _buf, _count*sizeof(SCLP23(Entity_extent_ptr)));
delete _buf;
_buf = newbuf;
}
#endif
}
void
SCLP23(Entity_extent__set)::Insert (SCLP23(Entity_extent_ptr) v, int index) {
#ifdef __OSTORE__
_rep.insert_before( (SCLP23(Entity_extent_ptr)) v, index);
#else
SCLP23(Entity_extent_ptr)* spot;
index = (index < 0) ? _count : index;
if (index < _count) {
Check(_count+1);
spot = &_buf[index];
memmove(spot+1, spot, (_count - index)*sizeof(SCLP23(Entity_extent_ptr)));
} else {
Check(index);
spot = &_buf[index];
}
*spot = v;
++_count;
#endif
}
void SCLP23(Entity_extent__set)::Append (SCLP23(Entity_extent_ptr) v) {
#ifdef __OSTORE__
_rep.insert_last( (SCLP23(Entity_extent_ptr)) v);
#else
int index = _count;
SCLP23(Entity_extent_ptr)* spot;
if (index < _count) {
Check(_count+1);
spot = &_buf[index];
memmove(spot+1, spot, (_count - index)*sizeof(SCLP23(Entity_extent_ptr)));
} else {
Check(index);
spot = &_buf[index];
}
*spot = v;
++_count;
#endif
}
void SCLP23(Entity_extent__set)::Remove (int index) {
#ifdef __OSTORE__
_rep.remove_at( index );
#else
if (0 <= index && index < _count) {
--_count;
SCLP23(Entity_extent_ptr)* spot = &_buf[index];
memmove(spot, spot+1, (_count - index)*sizeof(SCLP23(Entity_extent_ptr)));
}
#endif
}
#ifndef __OSTORE__
int SCLP23(Entity_extent__set)::Index (SCLP23(Entity_extent_ptr) v) {
for (int i = 0; i < _count; ++i) {
if (_buf[i] == v) {
return i;
}
}
return -1;
}
#endif
SCLP23(Entity_extent_ptr)
SCLP23(Entity_extent__set)::retrieve(int index)
{
#ifdef __OSTORE__
return _rep.retrieve(index);
#else
return operator[](index);
#endif
}
#ifndef __OSTORE__
SCLP23(Entity_extent_ptr)& SCLP23(Entity_extent__set)::operator[] (int index) {
Check(index);
// _count = G4std::max(_count, index+1);
_count = ( (_count > index+1) ? _count : (index+1) );
return _buf[index];
}
#endif
int
SCLP23(Entity_extent__set)::Count()
{
#ifdef __OSTORE__
return _rep.cardinality();
#else
return _count;
#endif
}
int
SCLP23(Entity_extent__set)::is_empty()
{
#ifdef __OSTORE__
return _rep.empty();
#else
return _count;
#endif
}
#ifndef __OSTORE__
void
SCLP23(Entity_extent__set)::Clear()
{
_count = 0;
}
#endif
#ifdef __OSTORE__
SCLP23(Entity_extent_ptr)
SCLP23(Entity_extent__set)::first()
{
return _cursor.first();
}
SCLP23(Entity_extent_ptr)
SCLP23(Entity_extent__set)::next()
{
return _cursor.next();
}
SCLP23(Integer)
SCLP23(Entity_extent__set)::more()
{
return _cursor.more();
}
#endif
/*****************************************************************************/
#if 0
Entity_extent__set::Entity_extent__set (int defaultSize) {
_bufsize = defaultSize;
_buf = new Entity_extent_ptr[_bufsize];
_count = 0;
}
Entity_extent__set::~Entity_extent__set () { delete _buf; }
void Entity_extent__set::Check (int index) {
Entity_extent_ptr* newbuf;
if (index >= _bufsize) {
_bufsize = (index+1) * 2;
newbuf = new Entity_extent_ptr[_bufsize];
memmove(newbuf, _buf, _count*sizeof(Entity_extent_ptr));
delete _buf;
_buf = newbuf;
}
}
void Entity_extent__set::Insert (Entity_extent_ptr v, int index) {
Entity_extent_ptr* spot;
index = (index < 0) ? _count : index;
if (index < _count) {
Check(_count+1);
spot = &_buf[index];
memmove(spot+1, spot, (_count - index)*sizeof(Entity_extent_ptr));
} else {
Check(index);
spot = &_buf[index];
}
*spot = v;
++_count;
}
void Entity_extent__set::Append (Entity_extent_ptr v) {
int index = _count;
Entity_extent_ptr* spot;
if (index < _count) {
Check(_count+1);
spot = &_buf[index];
memmove(spot+1, spot, (_count - index)*sizeof(Entity_extent_ptr));
} else {
Check(index);
spot = &_buf[index];
}
*spot = v;
++_count;
}
void Entity_extent__set::Remove (int index) {
if (0 <= index && index < _count) {
--_count;
Entity_extent_ptr* spot = &_buf[index];
memmove(spot, spot+1, (_count - index)*sizeof(Entity_extent_ptr));
}
}
int Entity_extent__set::Index (Entity_extent_ptr v) {
for (int i = 0; i < _count; ++i) {
if (_buf[i] == v) {
return i;
}
}
return -1;
}
Entity_extent_ptr& Entity_extent__set::operator[] (int index) {
Check(index);
// _count = G4std::max(_count, index+1);
_count = ( (_count > index+1) ? _count : (index+1) );
return _buf[index];
}
int
Entity_extent__set::Count()
{
return _count;
}
void
Entity_extent__set::Clear()
{
_count = 0;
}
#endif