mirror of
https://github.com/Garux/netradiant-custom.git
synced 2026-09-28 00:00:03 +02:00
modernize surfaceExtra_t storage
This commit is contained in:
@@ -40,34 +40,11 @@
|
||||
------------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#define GROW_SURFACE_EXTRAS 1024
|
||||
|
||||
static int numSurfaceExtras = 0;
|
||||
static int maxSurfaceExtras = 0;
|
||||
static surfaceExtra_t *surfaceExtras;
|
||||
static std::vector<surfaceExtra_t> surfaceExtras;
|
||||
static surfaceExtra_t seDefault;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
AllocSurfaceExtra()
|
||||
allocates a new extra storage
|
||||
*/
|
||||
|
||||
static surfaceExtra_t& AllocSurfaceExtra(){
|
||||
/* enough space? */
|
||||
AUTOEXPAND_BY_REALLOC_ADD( surfaceExtras, numSurfaceExtras, maxSurfaceExtras, GROW_SURFACE_EXTRAS );
|
||||
|
||||
/* add another */
|
||||
surfaceExtra_t& se = surfaceExtras[ numSurfaceExtras++ ];
|
||||
se = seDefault;
|
||||
|
||||
/* return it */
|
||||
return se;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
SetDefaultSampleSize()
|
||||
sets the default lightmap sample size
|
||||
@@ -86,7 +63,7 @@ void SetDefaultSampleSize( int sampleSize ){
|
||||
|
||||
void SetSurfaceExtra( const mapDrawSurface_t& ds ){
|
||||
/* get a new extra */
|
||||
surfaceExtra_t& se = AllocSurfaceExtra();
|
||||
surfaceExtra_t& se = surfaceExtras.emplace_back( seDefault );
|
||||
|
||||
/* copy out the relevant bits */
|
||||
se.mds = &ds;
|
||||
@@ -111,7 +88,7 @@ void SetSurfaceExtra( const mapDrawSurface_t& ds ){
|
||||
*/
|
||||
|
||||
const surfaceExtra_t& GetSurfaceExtra( int num ){
|
||||
if ( num < 0 || num >= numSurfaceExtras ) {
|
||||
if ( num < 0 || size_t( num ) >= surfaceExtras.size() ) {
|
||||
return seDefault;
|
||||
}
|
||||
return surfaceExtras[ num ];
|
||||
@@ -139,10 +116,10 @@ void WriteSurfaceExtraFile( const char *path ){
|
||||
FILE *sf = SafeOpenWrite( srfPath, "wt" );
|
||||
|
||||
/* lap through the extras list */
|
||||
for ( int i = -1; i < numSurfaceExtras; i++ )
|
||||
for ( int i = -1, size = surfaceExtras.size(); i < size; ++i )
|
||||
{
|
||||
/* get extra */
|
||||
const surfaceExtra_t *se = &GetSurfaceExtra( i );
|
||||
const surfaceExtra_t * const se = &GetSurfaceExtra( i );
|
||||
|
||||
/* default or surface num? */
|
||||
if ( i < 0 ) {
|
||||
@@ -252,8 +229,11 @@ void LoadSurfaceExtraFile( const char *path ){
|
||||
if ( surfaceNum < 0 ) {
|
||||
Error( "ReadSurfaceExtraFile(): %s, line %d: bogus surface num %d", srfPath.c_str(), scriptline, surfaceNum );
|
||||
}
|
||||
while ( surfaceNum >= numSurfaceExtras )
|
||||
AllocSurfaceExtra();
|
||||
if( size_t( surfaceNum ) >= surfaceExtras.size() ){
|
||||
if( size_t( surfaceNum ) >= surfaceExtras.capacity() ) // ensure that capacity grows efficiently, as it's not guaranteed for vector::resize()
|
||||
surfaceExtras.reserve( surfaceExtras.capacity() << 1 );
|
||||
surfaceExtras.resize( surfaceNum + 1, seDefault );
|
||||
}
|
||||
se = &surfaceExtras[ surfaceNum ];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user