@@ -372,14 +372,12 @@ template< typename T, SizeT defaultLength> class ForInfoListT
372
372
private:
373
373
T* eArr;
374
374
char buf[defaultLength * sizeof (T)]; // prevent constructor calls
375
- SizeT currentMaxLength;
376
375
SizeT sz;
377
376
378
377
public:
379
378
380
379
ForInfoListT (): eArr( reinterpret_cast <T*>(buf)), sz( 0 )
381
- {
382
- currentMaxLength=defaultLength;
380
+ {
383
381
}
384
382
385
383
~ForInfoListT ()
@@ -397,51 +395,42 @@ template< typename T, SizeT defaultLength> class ForInfoListT
397
395
// must be called before access
398
396
void InitSize ( SizeT s)
399
397
{
400
- // std::cerr<<this<<": InitSize("<<s<<")\n";
401
398
assert ( sz == 0 );
402
399
if ( s == 0 )
403
400
return ;
404
- sz = 0 ;
405
- if ( s <= currentMaxLength) // initialise currentMaxLength objects
401
+ sz = s ;
402
+ if ( s < defaultLength)
406
403
{
407
- for ( SizeT i=0 ; i<currentMaxLength ; ++i)
404
+ for ( SizeT i=0 ; i<s ; ++i)
408
405
eArr[ i].Init ();
409
406
return ;
410
407
}
411
408
eArr = new T[ s]; // constructor called
412
- currentMaxLength=s;
413
409
}
414
410
// only needed for EXECUTE
415
411
void resize ( SizeT s)
416
412
{
417
- // std::cerr<<this<<": resize("<<s<<"): ";
418
- if ( s == sz) {
419
- // std::cerr<<" == "<<sz<<": return.\n";
413
+ if ( s == sz)
420
414
return ;
421
- }
422
415
if ( s < sz) // shrink
423
416
{
424
- // std::cerr << " < " << sz << ": shrink.\n";
425
417
for ( SizeT i=s; i<sz; ++i)
426
418
eArr[ i].ClearInit (); // in case eArr was allocated
427
419
sz = s;
428
420
return ;
429
421
}
430
422
// s > sz -> grow
431
- if ( s <= currentMaxLength && eArr == reinterpret_cast <T*>(buf))
423
+ if ( s <= defaultLength && eArr == reinterpret_cast <T*>(buf))
432
424
{
433
- // std::cerr << " > " << sz << " but <= currentMaxLength : grow.\n";
434
425
for ( SizeT i=sz; i<s; ++i)
435
426
eArr[ i].Init ();
436
427
sz = s;
437
428
return ;
438
429
}
439
430
// this should never happen (or only in extreme rarely cases)
440
431
// the performance will go down
441
- // s > currentMaxLength
442
- // std::cerr << " > " << sz << " and > currentMaxLength : should not happen.\n";
432
+ // s > defaultLength
443
433
T* newArr = new T[ s]; // ctor called
444
- currentMaxLength=s;
445
434
if ( eArr != reinterpret_cast <T*>(buf))
446
435
{
447
436
for ( SizeT i=0 ; i<sz; ++i)
@@ -462,7 +451,7 @@ template< typename T, SizeT defaultLength> class ForInfoListT
462
451
sz = s;
463
452
}
464
453
// T operator[]( SizeT i) const { assert( i<sz); return eArr[i];}
465
- T& operator []( SizeT i) { assert ( i<currentMaxLength ); return eArr[i];}
454
+ T& operator []( SizeT i) { assert ( i<sz ); return eArr[i];}
466
455
SizeT size () const { return sz;}
467
456
iterator begin () const { return &eArr[0 ];}
468
457
iterator end () const { return &eArr[sz];}
@@ -474,6 +463,7 @@ template< typename T, SizeT defaultLength> class ForInfoListT
474
463
};
475
464
476
465
466
+
477
467
// for UD subroutines (written in GDL) ********************************
478
468
class EnvUDT : public EnvBaseT
479
469
{
@@ -491,7 +481,8 @@ class EnvUDT: public EnvBaseT
491
481
};
492
482
493
483
private:
494
- ForInfoListT<ForLoopInfoT, MAX_LOOPS_NUMBER> forLoopInfo; // defaults to $MAIN$ values in dpro.hpp
484
+ ForInfoListT<ForLoopInfoT, 32 > forLoopInfo;
485
+ // std::vector<ForLoopInfoT> forLoopInfo;
495
486
496
487
ProgNodeP ioError;
497
488
DLong onError; // on_error setting
0 commit comments