Home   Help Search Login Register  

Author Topic: preProcessFile--local vs. global variables  (Read 1762 times)

0 Members and 1 Guest are viewing this topic.

Offline RKurtzDmitriyev

  • Former Staff
  • ****
preProcessFile--local vs. global variables
« on: 05 Jun 2010, 00:33:54 »
Hi guys.

Question
Suppose I'm running an SQS script. If I assign a local variable to a function using the preProcessFile command (see example), will the pre-processed code be discarded after the script exits? If not, will running that same script again cause a duplicate function to be created? If so, will the cost of RAM be significant?

Example
Code: [Select]
_distanceFormula = preProcessFile "distancepos.sqf"

_dist = [getpos player, getpos alife] call _distanceFormula
? _dist > 1000 : hint "You are very far from having a life"
exit

Explanation

I'm making a mission that uses a lot of functions. Right now I have them all assigned to global variables in the init.sqs file.

Code: [Select]
distanceFormula = preprocessfile "distancepos.sqf"
gridCoord = preProcessFile "kurtzgridcoord.sqf"
gridCenter = preProcessFile "gridCenter.sqf"
;etc....

This is using a lot of global variables and I'm concerned that I could run aground on the :banghead: saveGame bug. Therefore, I'm considering listing the needed functions at the beginning of each SQS script (like in the example above), rather than having a single master list of functions.

However, I'm worried that this technique will create useless duplicates of functions saved in RAM, because each script might load a new instance of each .sqf file without deleting the old ones.

Any suggestions? :)
« Last Edit: 05 Jun 2010, 00:36:00 by RKurtzDmitriyev »
The OFP Editing Center wishes to remind you that the faithful COMREF will never threaten to stab you and, in fact, cannot speak.
However, in the event that it does speak, you are encouraged to heed its advice. ;)

Offline h-

  • OFPEC Site
  • Administrator
  • *****
  • Formerly HateR_Kint
    • OFPEC
Re: preProcessFile--local vs. global variables
« Reply #1 on: 05 Jun 2010, 05:40:47 »
I have no idea whether duplicate preprocessed functions glog up the memory, but as long as I can remember everybody has made the inits always so (in addons) that if the init preprocesses functions that init part will only run once so I guess is just better to be safe.

You could try to arrange your global variables in global array(s) because one array regardless of how much it contains is just one variable, so this way you can reduce 100 global variables into 1.

Like functions = [distanceFormula = preprocessfile "distancepos.sqf", gridCoord = preProcessFile "kurtzgridcoord.sqf",gridCenter = preProcessFile "gridCenter.sqf"]

And then later when you need a function
Code: [Select]
_blah = _bleh call (functions select 1)
Not sure that would work with functions but at least it works with regular global variables.
Project MCAR   ---   Northern Fronts   ---   Emitter 3Ditor
INFORMATIVE THREAD TITLES PLEASE. "PLEASE HELP" IS NOT ONE..
Chuck Norris can divide by zero.

Offline RKurtzDmitriyev

  • Former Staff
  • ****
Re: preProcessFile--local vs. global variables
« Reply #2 on: 05 Jun 2010, 14:13:03 »
Ah, thanks h-. I was worried that no one knew/cared enough about old OFP scripting to answer such an advanced question. :)

A single global array sounds like a good idea and I bet it will work. However, are you sure you meant to type this

Code: [Select]
functions = [distanceFormula = preprocessfile "distancepos.sqf", gridCoord = preProcessFile "kurtzgridcoord.sqf",gridCenter = preProcessFile "gridCenter.sqf"]

Or something more like this?

Code: [Select]
functions = [preProcessFile "distancepos.sqf", preProcessFile "kurtzgridcoord.sqf", preProcessFile "gridCenter.sqf"]

The former example would seem to be using lots of global variables anyway.

But anyway, thanks for the input. I didn't think about the global arrays option, that will probably capture the best of both worlds.
The OFP Editing Center wishes to remind you that the faithful COMREF will never threaten to stab you and, in fact, cannot speak.
However, in the event that it does speak, you are encouraged to heed its advice. ;)

Offline h-

  • OFPEC Site
  • Administrator
  • *****
  • Formerly HateR_Kint
    • OFPEC
Re: preProcessFile--local vs. global variables
« Reply #3 on: 05 Jun 2010, 18:29:50 »
The latter option would most likely give you just errors because the preprocessed function has to be stored in a variable.

You should of course use local variables instead of the global ones, my bad  :D
Code: [Select]
functions = [_distanceFormula = preprocessfile "distancepos.sqf", _gridCoord = preProcessFile "kurtzgridcoord.sqf",_gridCenter = preProcessFile "gridCenter.sqf"]
Project MCAR   ---   Northern Fronts   ---   Emitter 3Ditor
INFORMATIVE THREAD TITLES PLEASE. "PLEASE HELP" IS NOT ONE..
Chuck Norris can divide by zero.