mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-15 02:18:33 +05:00
Merge branch 'range_check_in_ngarray' into 'master'
Use new range check macro in NgArray See merge request ngsolve/netgen!632
This commit is contained in:
commit
f3a2cee15b
@ -2,7 +2,6 @@ target_sources(nglib PRIVATE
|
||||
gzstream.cpp
|
||||
hashtabl.cpp
|
||||
mystring.cpp
|
||||
ngarray.cpp
|
||||
ngbitarray.cpp
|
||||
optmem.cpp
|
||||
parthreads.cpp
|
||||
|
@ -1,75 +0,0 @@
|
||||
#ifndef FILE_NGSTD_NgArrayCPP
|
||||
#define FILE_NGSTD_NgArrayCPP
|
||||
// necessary for SGI ????
|
||||
|
||||
/**************************************************************************/
|
||||
/* File: array.cpp */
|
||||
/* Author: Joachim Schoeberl */
|
||||
/* Date: 01. Jun. 95 */
|
||||
/**************************************************************************/
|
||||
|
||||
/*
|
||||
Abstract data type NgArray
|
||||
*/
|
||||
|
||||
#include <mystdlib.h>
|
||||
#include <myadt.hpp>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
namespace netgen
|
||||
{
|
||||
//using namespace netgen;
|
||||
|
||||
#ifdef NONE
|
||||
void BASE_Array :: ReSize (int minsize, int elementsize)
|
||||
{
|
||||
cout << "resize, minsize = " << minsize << endl;
|
||||
|
||||
if (inc == -1)
|
||||
throw Exception ("Try to resize fixed size array");
|
||||
|
||||
|
||||
void * p;
|
||||
int nsize = (inc) ? allocsize + inc : 2 * allocsize;
|
||||
if (nsize < minsize) nsize = minsize;
|
||||
|
||||
if (data)
|
||||
{
|
||||
p = new char [nsize * elementsize];
|
||||
|
||||
int mins = (nsize < actsize) ? nsize : actsize;
|
||||
memcpy (p, data, mins * elementsize);
|
||||
|
||||
delete [] static_cast<char*> (data);
|
||||
data = p;
|
||||
}
|
||||
else
|
||||
{
|
||||
data = new char[nsize * elementsize];
|
||||
}
|
||||
|
||||
allocsize = nsize;
|
||||
cout << "resize done" << endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void BASE_Array :: RangeCheck (int i) const
|
||||
{
|
||||
if (i < 0 || i >= actsize)
|
||||
throw ArrayRangeException ();
|
||||
}
|
||||
|
||||
void BASE_Array :: CheckNonEmpty () const
|
||||
{
|
||||
if (!actsize)
|
||||
{
|
||||
throw Exception ("NgArray should not be empty");
|
||||
// cerr << "NgArray shouldn't be empty";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif // FILE_NGSTD_NgArrayCPP
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace netgen
|
||||
{
|
||||
using namespace ngcore;
|
||||
|
||||
// template <class T, int B1, int B2> class IndirectArray;
|
||||
template <class TA1, class TA2> class NgIndirectArray;
|
||||
@ -111,11 +112,7 @@ namespace netgen
|
||||
/// Access array. BASE-based
|
||||
T & operator[] (TIND i) const
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (i-BASE < 0 || i-BASE >= size)
|
||||
cout << "array<" << typeid(T).name() << "> out of range, i = " << i << ", s = " << size << endl;
|
||||
#endif
|
||||
|
||||
NETGEN_CHECK_RANGE(i,BASE,size+BASE);
|
||||
return data[i-BASE];
|
||||
}
|
||||
|
||||
@ -130,13 +127,7 @@ namespace netgen
|
||||
/// Access array, one-based (old fashioned)
|
||||
T & Elem (int i)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (i < 1 || i > size)
|
||||
cout << "NgArray<" << typeid(T).name()
|
||||
<< ">::Elem out of range, i = " << i
|
||||
<< ", s = " << size << endl;
|
||||
#endif
|
||||
|
||||
NETGEN_CHECK_RANGE(i,1,size+1);
|
||||
return ((T*)data)[i-1];
|
||||
}
|
||||
|
||||
@ -144,30 +135,21 @@ namespace netgen
|
||||
// [[deprecated("Use operator[] instead")]]
|
||||
const T & Get (int i) const
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (i < 1 || i > size)
|
||||
cout << "NgArray<" << typeid(T).name() << ">::Get out of range, i = " << i
|
||||
<< ", s = " << size << endl;
|
||||
#endif
|
||||
|
||||
NETGEN_CHECK_RANGE(i,1,size+1);
|
||||
return ((const T*)data)[i-1];
|
||||
}
|
||||
|
||||
/// Access array, one-based (old fashioned)
|
||||
void Set (int i, const T & el)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (i < 1 || i > size)
|
||||
cout << "NgArray<" << typeid(T).name() << ">::Set out of range, i = " << i
|
||||
<< ", s = " << size << endl;
|
||||
#endif
|
||||
|
||||
NETGEN_CHECK_RANGE(i,1,size+1);
|
||||
((T*)data)[i-1] = el;
|
||||
}
|
||||
|
||||
/// access first element
|
||||
T & First () const
|
||||
{
|
||||
NETGEN_CHECK_RANGE(0,0,size);
|
||||
return data[0];
|
||||
}
|
||||
|
||||
@ -175,6 +157,7 @@ namespace netgen
|
||||
/// access last element. check by macro CHECK_RANGE
|
||||
T & Last () const
|
||||
{
|
||||
NETGEN_CHECK_RANGE(size-1,0,size);
|
||||
return data[size-1];
|
||||
}
|
||||
|
||||
@ -345,10 +328,7 @@ namespace netgen
|
||||
/// Delete element i (0-based). Move last element to position i.
|
||||
void Delete (TIND i)
|
||||
{
|
||||
#ifdef CHECK_Array_RANGE
|
||||
RangeCheck (i+1);
|
||||
#endif
|
||||
|
||||
NETGEN_CHECK_RANGE(i,0,size);
|
||||
data[i] = std::move(data[size-1]);
|
||||
size--;
|
||||
// DeleteElement (i+1);
|
||||
@ -358,10 +338,7 @@ namespace netgen
|
||||
/// Delete element i (1-based). Move last element to position i.
|
||||
void DeleteElement (TIND i)
|
||||
{
|
||||
#ifdef CHECK_Array_RANGE
|
||||
RangeCheck (i);
|
||||
#endif
|
||||
|
||||
NETGEN_CHECK_RANGE(i,1,size+1);
|
||||
data[i-1] = std::move(data[size-1]);
|
||||
size--;
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ public:
|
||||
|
||||
/// Creates fixed maximal element size table
|
||||
inline TABLE (const NgFlatArray<int,BASE> & entrysizes)
|
||||
: BASE_TABLE (NgFlatArray<int> (entrysizes.Size(), const_cast<int*>(&entrysizes[BASE])),
|
||||
: BASE_TABLE (NgFlatArray<int> (entrysizes.Size(), entrysizes.Size() ? const_cast<int*>(&entrysizes[BASE]) : nullptr),
|
||||
sizeof(T))
|
||||
{ ; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user