1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956 |
- using System;
- using System.Collections.Generic;
- using NTERA.EmuEra.Game.EraEmu.GameData.Expression;
- using NTERA.EmuEra.Game.EraEmu.GameProc;
- using NTERA.EmuEra.Game.EraEmu.Sub;
- namespace NTERA.EmuEra.Game.EraEmu.GameData.Variable
- {
- //IndexOutOfRangeException, ArgumentOutOfRangeExceptionを投げることがある。VariableTermの方で処理すること。
- //引数は整数しか受け付けない。*.csvを利用した置換はVariableTermの方で処理すること
- internal abstract class VariableToken
- {
- protected VariableToken(VariableCode varCode, VariableData varData)
- {
- Code = varCode;
- VariableType = ((varCode & VariableCode.__INTEGER__) == VariableCode.__INTEGER__) ? typeof(Int64) : typeof(string);
- VarCodeInt = (int)(varCode & VariableCode.__LOWERCASE__);
- varName = varCode.ToString();
- this.varData = varData;
- IsForbid = false;
- IsPrivate = false;
- IsReference = false;
- Dimension = 0;
- IsGlobal = (Code == VariableCode.GLOBAL) || (Code == VariableCode.GLOBALS);
- if ((Code & VariableCode.__ARRAY_1D__) == VariableCode.__ARRAY_1D__)
- Dimension = 1;
- if ((Code & VariableCode.__ARRAY_2D__) == VariableCode.__ARRAY_2D__)
- Dimension = 2;
- if ((Code & VariableCode.__ARRAY_3D__) == VariableCode.__ARRAY_3D__)
- Dimension = 3;
- IsSavedata = false;
- if ((Code == VariableCode.GLOBAL) || (Code == VariableCode.GLOBALS))
- IsSavedata = true;
- else if ((Code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__)
- {
- IsSavedata = true;
- }
- else if (((Code & VariableCode.__EXTENDED__) != VariableCode.__EXTENDED__)
- && ((Code & VariableCode.__CALC__) != VariableCode.__CALC__)
- && ((Code & VariableCode.__UNCHANGEABLE__) != VariableCode.__UNCHANGEABLE__)
- && ((Code & VariableCode.__LOCAL__) != VariableCode.__LOCAL__)
- && (!varName.StartsWith("NOTUSE_")))
- {
- VariableCode flag = Code & (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__STRING__ | VariableCode.__INTEGER__ | VariableCode.__CHARACTER_DATA__);
- switch (flag)
- {
- case VariableCode.__CHARACTER_DATA__ | VariableCode.__INTEGER__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_INTEGER__)
- IsSavedata = true;
- break;
- case VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_STRING__)
- IsSavedata = true;
- break;
- case VariableCode.__CHARACTER_DATA__ | VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_INTEGER_ARRAY__)
- IsSavedata = true;
- break;
- case VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_STRING_ARRAY__)
- IsSavedata = true;
- break;
- case VariableCode.__INTEGER__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_INTEGER__)
- IsSavedata = true;
- break;
- case VariableCode.__STRING__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_STRING__)
- IsSavedata = true;
- break;
- case VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_INTEGER_ARRAY__)
- IsSavedata = true;
- break;
- case VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
- if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_STRING_ARRAY__)
- IsSavedata = true;
- break;
- }
- }
- }
- public readonly VariableCode Code;
- public readonly int VarCodeInt;
- protected readonly VariableData varData;
- protected string varName;
- public Type VariableType { get; protected set; }
- public bool CanRestructure { get; protected set; }
- public string Name => varName;
- //CodeEEにしているけど実際はExeEEかもしれない
- public virtual Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- { throw new CodeEE("整数型でない変数" + varName + "を整数型として呼び出しました"); }
- public virtual string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- { throw new CodeEE("文字列型でない変数" + varName + "を文字列型として呼び出しました"); }
- public virtual void SetValue(Int64 value, Int64[] arguments)
- { throw new CodeEE("整数型でない変数" + varName + "を整数型として呼び出しました"); }
- public virtual void SetValue(string value, Int64[] arguments)
- { throw new CodeEE("文字列型でない変数" + varName + "を文字列型として呼び出しました"); }
- public virtual void SetValue(Int64[] values, Int64[] arguments)
- { throw new CodeEE("整数型配列でない変数" + varName + "を整数型配列として呼び出しました"); }
- public virtual void SetValue(string[] values, Int64[] arguments)
- { throw new CodeEE("文字列型配列でない変数" + varName + "を文字列型配列として呼び出しました"); }
- public virtual void SetValueAll(Int64 value, int start, int end, int charaPos)
- { throw new CodeEE("整数型配列でない変数" + varName + "を整数型配列として呼び出しました"); }
- public virtual void SetValueAll(string value, int start, int end, int charaPos)
- { throw new CodeEE("文字列型配列でない変数" + varName + "を文字列型配列として呼び出しました"); }
- public virtual Int64 PlusValue(Int64 value, Int64[] arguments)
- { throw new CodeEE("整数型でない変数" + varName + "を整数型として呼び出しました"); }
- public virtual Int32 GetLength()
- { throw new CodeEE("配列型でない変数" + varName + "の長さを取得しようとしました"); }
- public virtual Int32 GetLength(int dimension)
- { throw new CodeEE("配列型でない変数" + varName + "の長さを取得しようとしました"); }
- public virtual object GetArray()
- {
- if (IsCharacterData)
- throw new CodeEE("キャラクタ変数" + varName + "を非キャラ変数として呼び出しました");
- throw new CodeEE("配列型でない変数" + varName + "の配列を取得しようとしました");
- }
- public virtual object GetArrayChara(int charano)
- {
- if (!IsCharacterData)
- throw new CodeEE("非キャラクタ変数" + varName + "をキャラ変数として呼び出しました");
- throw new CodeEE("配列型でない変数" + varName + "の配列を取得しようとしました");
- }
- public void throwOutOfRangeException(Int64[] arguments, Exception e)
- {
- CheckElement(arguments, new[] { true, true, true });
- throw e;
- }
- public virtual void CheckElement(Int64[] arguments, bool[] doCheck) { }
- public void CheckElement(Int64[] arguments)
- {
- CheckElement(arguments, new[] { true, true, true });
- }
- public virtual void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments, new[] { true, true, true });
- }
- public int CodeInt => VarCodeInt;
- public VariableCode CodeFlag => Code & VariableCode.__UPPERCASE__;
- public bool IsNull => Code == VariableCode.__NULL__;
- public bool IsCharacterData => ((Code & VariableCode.__CHARACTER_DATA__) == VariableCode.__CHARACTER_DATA__);
- public bool IsInteger => ((Code & VariableCode.__INTEGER__) == VariableCode.__INTEGER__);
- public bool IsString => ((Code & VariableCode.__STRING__) == VariableCode.__STRING__);
- public bool IsArray1D => ((Code & VariableCode.__ARRAY_1D__) == VariableCode.__ARRAY_1D__);
- public bool IsArray2D => ((Code & VariableCode.__ARRAY_2D__) == VariableCode.__ARRAY_2D__);
- public bool IsArray3D => ((Code & VariableCode.__ARRAY_3D__) == VariableCode.__ARRAY_3D__);
- /// <summary>
- /// 1810alpha007 諸事情によりReadOnlyからIsConstに改名。
- /// </summary>
- public virtual bool IsConst => ((Code & VariableCode.__UNCHANGEABLE__) == VariableCode.__UNCHANGEABLE__);
- public bool IsCalc => ((Code & VariableCode.__CALC__) == VariableCode.__CALC__);
- public bool IsLocal => ((Code & VariableCode.__LOCAL__) == VariableCode.__LOCAL__);
- public bool CanForbid => ((Code & VariableCode.__CAN_FORBID__) == VariableCode.__CAN_FORBID__);
- public bool IsForbid { get; protected set; }
- public bool IsPrivate { get; protected set; }
- public bool IsGlobal { get; protected set; }
- public bool IsSavedata { get; protected set; }
- public bool IsReference { get; protected set; }
- public int Dimension { get; protected set; }
- }
- internal abstract class CharaVariableToken : VariableToken
- {
- protected CharaVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- sizes = CharacterData.CharacterVarLength(varCode, varData.Constant);
- if (sizes != null)
- {
- totalSize = 1;
- for (int i = 0; i < sizes.Length; i++)
- totalSize *= sizes[i];
- IsForbid = totalSize == 0;
- }
- IsPrivate = false;
- CanRestructure = false;
- }
- protected int[] sizes;
- protected int totalSize;
- public override Int32 GetLength()
- {
- if (sizes.Length == 1)
- return sizes[0];
- if (sizes.Length == 0)
- throw new CodeEE("非配列型のキャラ変数" + varName + "の長さを取得しようとしました");
- throw new CodeEE(Dimension + "次元配列型のキャラ変数" + varName + "の長さを次元を指定せずに取得しようとしました");
- }
- public override Int32 GetLength(int dimension)
- {
- if (sizes.Length == 0)
- throw new CodeEE("非配列型のキャラ変数" + varName + "の長さを取得しようとしました");
- if (dimension < sizes.Length)
- return sizes[dimension];
- throw new CodeEE("配列型変数のキャラ変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= varData.CharacterList.Count)))
- throw new CodeEE("Character array variable " + varName + " at the first argument (" + arguments[0] + ") is out of range of the character registration number");
- if (doCheck.Length > 1 && sizes.Length > 0 && doCheck[1] && ((arguments[1] < 0) || (arguments[1] >= sizes[0])))
- throw new CodeEE("Character array variable " + varName + " at the second argument (" + arguments[1] + ") is out of range of the array");
- if (doCheck.Length > 2 && sizes.Length > 1 && doCheck[2] && ((arguments[2] < 0) || (arguments[2] >= sizes[1])))
- throw new CodeEE("Character array variable " + varName + " at the third argument (" + arguments[2] + ") is out of range of the array");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- if ((index1 < 0) || (index1 > sizes[0]))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > sizes[0]))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- internal abstract class UserDefinedVariableToken : VariableToken
- {
- protected UserDefinedVariableToken(VariableCode varCode, UserDefinedVariableData data)
- : base(varCode, null)
- {
- varName = data.Name;
- IsPrivate = data.Private;
- isConst = data.Const;
- sizes = data.Lengths;
- IsGlobal = data.Global;
- IsSavedata = data.Save;
- //Dimension = sizes.Length;
- totalSize = 1;
- for (int i = 0; i < sizes.Length; i++)
- totalSize *= sizes[i];
- IsForbid = totalSize == 0;
- CanRestructure = isConst;
- }
- public abstract void SetDefault();
- protected bool isConst;
- protected int[] sizes;
- protected int totalSize;
- //public bool IsGlobal { get; protected set; }
- //public bool IsSavedata { get; protected set; }
- public override bool IsConst => isConst;
- public override Int32 GetLength()
- {
- if (Dimension == 1)
- return sizes[0];
- throw new CodeEE(Dimension + "次元配列型変数" + varName + "の長さを取得しようとしました");
- }
- public override Int32 GetLength(int dimension)
- {
- if (dimension < Dimension)
- return sizes[dimension];
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- //if (array == null)
- // throw new ExeEE("プライベート変数" + varName + "の配列が用意されていない");
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= sizes[0])))
- throw new CodeEE("配列型変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- if (sizes.Length >= 2 && ((arguments[1] < 0) || (arguments[1] >= sizes[1])))
- throw new CodeEE("配列型変数" + varName + "の第2引数(" + arguments[1] + ")は配列の範囲外です");
- if (sizes.Length >= 3 && ((arguments[2] < 0) || (arguments[2] >= sizes[2])))
- throw new CodeEE("配列型変数" + varName + "の第3引数(" + arguments[2] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > sizes[Dimension - 1]))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > sizes[Dimension - 1]))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- public abstract void In();
- public abstract void Out();
- public bool IsStatic { get; protected set; }
- }
- internal abstract class UserDefinedCharaVariableToken : CharaVariableToken
- {
- protected UserDefinedCharaVariableToken(VariableCode varCode, UserDefinedVariableData data, VariableData varData, int arrayIndex)
- : base(varCode, varData)
- {
- ArrayIndex = arrayIndex;
- DimData = data;
- varName = data.Name;
- sizes = data.Lengths;
- IsGlobal = data.Global;
- IsSavedata = data.Save;
- //Dimension = sizes.Length;
- totalSize = 1;
- for (int i = 0; i < sizes.Length; i++)
- totalSize *= sizes[i];
- IsForbid = totalSize == 0;
- }
- public readonly UserDefinedVariableData DimData;
- public readonly int ArrayIndex;
- public override object GetArrayChara(int charano)
- {
- return varData.CharacterList[charano].UserDefCVarDataList[ArrayIndex];
- }
- }
- //1808beta009 廃止 UserDefinedVariableTokenで一括して扱う
- //internal abstract class PrivateVariableToken : UserDefinedVariableToken
- //{
- // protected PrivateVariableToken(VariableCode varCode, UserDefinedVariableData data)
- // : base(varCode, data)
- // {
- // IsPrivate = true;
- // }
- //}
- /// <summary>
- /// 1808beta009 追加
- /// 参照型。public もあるよ
- /// </summary>
- internal abstract class ReferenceToken : UserDefinedVariableToken
- {
- protected ReferenceToken(VariableCode varCode, UserDefinedVariableData data)
- : base(varCode, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- IsReference = true;
- arrayList = new List<Array>();
- IsForbid = false;
- }
- protected List<Array> arrayList;
- protected Array array;
- public override void SetDefault()
- {//Defaultのセットは参照元がやるべき
- }
- public override Int32 GetLength()
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- if (Dimension != 1)
- throw new CodeEE(Dimension + "次元配列型変数" + varName + "の長さを取得しようとしました");
- return array.Length;
- }
- public override Int32 GetLength(int dimension)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- if (dimension < Dimension)
- return array.GetLength(dimension);
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.GetLength(0))))
- throw new CodeEE("配列型変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- if (Dimension >= 2 && ((arguments[1] < 0) || (arguments[1] >= array.GetLength(1))))
- throw new CodeEE("配列型変数" + varName + "の第2引数(" + arguments[1] + ")は配列の範囲外です");
- if (Dimension >= 3 && ((arguments[2] < 0) || (arguments[2] >= array.GetLength(2))))
- throw new CodeEE("配列型変数" + varName + "の第3引数(" + arguments[2] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.GetLength(Dimension - 1)))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.GetLength(Dimension - 1)))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- int counter;
- public override void In()
- {
- if (counter > 0)
- arrayList.Add(array);
- counter++;
- array = null;
- }
- public override void Out()
- {
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- counter--;
- }
- public override object GetArray()
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return array;
- }
- public void SetRef(Array refArray)
- {
- array = refArray;
- }
- /// <summary>
- /// 型が一致するかどうか(参照可能かどうか)
- /// </summary>
- /// <param name="rother"></param>
- /// <returns></returns>
- public bool MatchType(VariableToken rother, bool allowChara, out string errMes)
- {
- errMes = "";
- if (rother == null)
- { errMes = "参照先変数は省略できません"; return false; }
- if (rother.IsCalc)
- { errMes = "疑似変数は参照できません"; return false; }
- //TODO constの参照
- //if (rother.IsConst != this.isConst)
- if (rother.IsConst)
- { errMes = "定数は参照できません"; return false; }
- //1812 ローカル参照の条件変更
- //ローカルかつDYNAMICなREFはローカル参照できる
- if ((!IsPrivate) && (rother.IsPrivate || rother.IsLocal))
- { errMes = "広域の参照変数はローカル変数を参照できません"; return false; }
- ////1810beta002 ローカル参照禁止
- //if ((!rother.IsReference) && (rother.IsPrivate || rother.IsLocal))
- //{ errMes = "ローカル変数は参照できません"; return false; }
- if (rother.IsCharacterData && !allowChara)
- { errMes = "キャラ変数は参照できません"; return false; }
- if (IsInteger != rother.IsInteger)
- { errMes = "型が異なる変数は参照できません"; return false; }
- if (Dimension != rother.Dimension)
- { errMes = "次元数が異なる変数は参照できません"; return false; }
- return true;
- }
- }
- internal abstract class LocalVariableToken : VariableToken
- {
- public LocalVariableToken(VariableCode varCode, VariableData varData, string subId, int size)
- : base(varCode, varData)
- {
- CanRestructure = false;
- subID = subId;
- this.size = size;
- }
- public abstract void SetDefault();
- public abstract void resize(int newSize);
- protected string subID;
- protected int size;
- public override Int32 GetLength()
- {
- return size;
- }
- public override Int32 GetLength(int dimension)
- {
- if (dimension == 0)
- return size;
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- //if (array == null)
- // throw new ExeEE("プライベート変数" + varName + "の配列が用意されていない");
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= size)))
- throw new CodeEE("配列変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > size))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > size))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- //サブクラスの詳細はVariableData以外は知らなくてよい
- internal sealed partial class VariableData
- {
- #region 変数
- private sealed class IntVariableToken : VariableToken
- {
- public IntVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataInteger;
- }
- Int64[] array;
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[VarCodeInt];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[VarCodeInt] = value;
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- array[VarCodeInt] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[VarCodeInt] += value;
- return array[VarCodeInt];
- }
- }
- private sealed class Int1DVariableToken : VariableToken
- {
- public Int1DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataIntegerArray[VarCodeInt];
- IsForbid = array.Length == 0;
- }
- Int64[] array;
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0]] += value;
- return array[arguments[0]];
- }
- public override Int32 GetLength()
- { return array.Length; }
- public override Int32 GetLength(int dimension)
- {
- if (dimension == 0)
- return array.Length;
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.Length)))
- throw new CodeEE("配列変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class Int2DVariableToken : VariableToken
- {
- public Int2DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataIntegerArray2D[VarCodeInt];
- IsForbid = array.Length == 0;
- }
- Int64[,] array;
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0], arguments[1]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] += value;
- return array[arguments[0], arguments[1]];
- }
- public override Int32 GetLength()
- { throw new CodeEE("2次元配列型変数" + varName + "の長さを取得しようとしました"); }
- public override Int32 GetLength(int dimension)
- {
- if ((dimension == 0) || (dimension == 1))
- return array.GetLength(dimension);
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.GetLength(0))))
- throw new CodeEE("二次元配列" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- if (doCheck[1] && ((arguments[1] < 0) || (arguments[1] >= array.GetLength(1))))
- throw new CodeEE("二次元配列" + varName + "の第2引数(" + arguments[1] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.GetLength(1)))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.GetLength(1)))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class Int3DVariableToken : VariableToken
- {
- public Int3DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataIntegerArray3D[VarCodeInt];
- IsForbid = array.Length == 0;
- }
- Int64[, ,] array;
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- array[i, j, k] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] += value;
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override Int32 GetLength()
- { throw new CodeEE("3次元配列型変数" + varName + "の長さを取得しようとしました"); }
- public override Int32 GetLength(int dimension)
- {
- if ((dimension == 0) || (dimension == 1) || (dimension == 2))
- return array.GetLength(dimension);
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.GetLength(0))))
- throw new CodeEE("三次元配列" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- if (doCheck[1] && ((arguments[1] < 0) || (arguments[1] >= array.GetLength(1))))
- throw new CodeEE("三次元配列" + varName + "の第2引数(" + arguments[1] + ")は配列の範囲外です");
- if (doCheck[2] && ((arguments[2] < 0) || (arguments[2] >= array.GetLength(2))))
- throw new CodeEE("三次元配列" + varName + "の第3引数(" + arguments[2] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.GetLength(2)))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.GetLength(2)))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class StrVariableToken : VariableToken
- {
- public StrVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataString;
- IsForbid = array.Length == 0;
- }
- string[] array;
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[VarCodeInt];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[VarCodeInt] = value;
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- array[VarCodeInt] = value;
- }
- }
- private sealed class Str1DVariableToken : VariableToken
- {
- public Str1DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataStringArray[VarCodeInt];
- IsForbid = array.Length == 0;
- }
- string[] array;
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- //Bartoum : Str.csv variable names switch here, so we try to translate
- return Translation.translate(array[arguments[0]], "Str", translate);
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override Int32 GetLength()
- { return array.Length; }
- public override Int32 GetLength(int dimension)
- {
- if (dimension == 0)
- return array.Length;
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.Length)))
- throw new CodeEE("配列変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class Str2DVariableToken : VariableToken
- {
- public Str2DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataStringArray2D[VarCodeInt];
- IsForbid = array.Length == 0;
- }
- string[,] array;
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0], arguments[1]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override Int32 GetLength()
- { throw new CodeEE("2次元配列型変数" + varName + "の長さを取得しようとしました"); }
- public override Int32 GetLength(int dimension)
- {
- if ((dimension == 0) || (dimension == 1))
- return array.GetLength(dimension);
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.GetLength(0))))
- throw new CodeEE("二次元配列" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- if (doCheck[1] && ((arguments[1] < 0) || (arguments[1] >= array.GetLength(1))))
- throw new CodeEE("二次元配列" + varName + "の第2引数(" + arguments[1] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.GetLength(1)))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.GetLength(1)))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class Str3DVariableToken : VariableToken
- {
- public Str3DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- array = varData.DataStringArray3D[VarCodeInt];
- IsForbid = array.Length == 0;
- }
- string[, ,] array;
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- array[i, j, k] = value;
- }
- public override Int32 GetLength()
- { throw new CodeEE("3次元配列型変数" + varName + "の長さを取得しようとしました"); }
- public override Int32 GetLength(int dimension)
- {
- if ((dimension == 0) || (dimension == 1) || (dimension == 2))
- return array.GetLength(dimension);
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.GetLength(0))))
- throw new CodeEE("三次元配列" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- if (doCheck[1] && ((arguments[1] < 0) || (arguments[1] >= array.GetLength(1))))
- throw new CodeEE("三次元配列" + varName + "の第2引数(" + arguments[1] + ")は配列の範囲外です");
- if (doCheck[2] && ((arguments[2] < 0) || (arguments[2] >= array.GetLength(2))))
- throw new CodeEE("三次元配列" + varName + "の第3引数(" + arguments[2] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.GetLength(2)))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.GetLength(2)))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class CharaIntVariableToken : CharaVariableToken
- {
- public CharaIntVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- return chara.DataInteger[VarCodeInt];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataInteger[VarCodeInt] = value;
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- varData.CharacterList[charaPos].setValueAll(VarCodeInt, value);
- //CharacterData chara = varData.CharacterList[charaPos];
- //chara.DataInteger[VarCodeInt] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataInteger[VarCodeInt] += value;
- return chara.DataInteger[VarCodeInt];
- }
- }
- private sealed class CharaInt1DVariableToken : CharaVariableToken
- {
- public CharaInt1DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- return chara.DataIntegerArray[VarCodeInt][arguments[1]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataIntegerArray[VarCodeInt][arguments[1]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- Int64[] array = chara.DataIntegerArray[VarCodeInt];
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- varData.CharacterList[charaPos].setValueAll1D(VarCodeInt, value, start, end);
- //CharacterData chara = varData.CharacterList[charaPos];
- //Int64[] array = chara.DataIntegerArray[VarCodeInt];
- //for (int i = start; i < end; i++)
- // array[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataIntegerArray[VarCodeInt][arguments[1]] += value;
- return chara.DataIntegerArray[VarCodeInt][arguments[1]];
- }
- public override object GetArrayChara(int charano)
- {
- CharacterData chara = varData.CharacterList[charano];
- return chara.DataIntegerArray[VarCodeInt];
- }
- }
- private sealed class CharaStrVariableToken : CharaVariableToken
- {
- public CharaStrVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- return chara.DataString[VarCodeInt];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataString[VarCodeInt] = value;
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- varData.CharacterList[charaPos].setValueAll(VarCodeInt, value);
- //CharacterData chara = varData.CharacterList[charaPos];
- //chara.DataString[VarCodeInt] = value;
- }
- }
- private sealed class CharaStr1DVariableToken : CharaVariableToken
- {
- public CharaStr1DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- return chara.DataStringArray[VarCodeInt][arguments[1]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataStringArray[VarCodeInt][arguments[1]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- string[] array = chara.DataStringArray[VarCodeInt];
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- varData.CharacterList[charaPos].setValueAll1D(VarCodeInt, value, start, end);
- //CharacterData chara = varData.CharacterList[charaPos];
- //String[] array = chara.DataStringArray[VarCodeInt];
- //for (int i = start; i < end; i++)
- // array[i] = value;
- }
- public override object GetArrayChara(int charano)
- {
- CharacterData chara = varData.CharacterList[charano];
- return chara.DataStringArray[VarCodeInt];
- }
- }
- private sealed class CharaInt2DVariableToken : CharaVariableToken
- {
- public CharaInt2DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- return chara.DataIntegerArray2D[VarCodeInt][arguments[1], arguments[2]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataIntegerArray2D[VarCodeInt][arguments[1], arguments[2]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- Int64[,] array = chara.DataIntegerArray2D[VarCodeInt];
- int start = (int)arguments[2];
- int end = start + values.Length;
- int index1 = (int)arguments[1];
- for (int i = start; i < end; i++)
- array[index1, i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- varData.characterList[charaPos].setValueAll2D(VarCodeInt, value);
- //CharacterData chara = varData.CharacterList[charaPos];
- //Int64[,] array = chara.DataIntegerArray2D[VarCodeInt];
- //int a1 = array.GetLength(0);
- //int a2 = array.GetLength(1);
- //for (int i = 0; i < a1; i++)
- // for (int j = 0; j < a2; j++)
- // array[i, j] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataIntegerArray2D[VarCodeInt][arguments[1], arguments[2]] += value;
- return chara.DataIntegerArray2D[VarCodeInt][arguments[1], arguments[2]];
- }
- public override object GetArrayChara(int charano)
- {
- CharacterData chara = varData.CharacterList[charano];
- return chara.DataIntegerArray2D[VarCodeInt];
- }
- }
- private sealed class CharaStr2DVariableToken : CharaVariableToken
- {
- public CharaStr2DVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- return chara.DataStringArray2D[VarCodeInt][arguments[1], arguments[2]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- chara.DataStringArray2D[VarCodeInt][arguments[1], arguments[2]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- CharacterData chara = varData.CharacterList[(int)arguments[0]];
- string[,] array = chara.DataStringArray2D[VarCodeInt];
- int start = (int)arguments[2];
- int end = start + values.Length;
- int index1 = (int)arguments[1];
- for (int i = start; i < end; i++)
- array[index1, i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- varData.characterList[charaPos].setValueAll2D(VarCodeInt, value);
- //CharacterData chara = varData.CharacterList[charaPos];
- //String[,] array = chara.DataStringArray2D[VarCodeInt];
- //int a1 = array.GetLength(0);
- //int a2 = array.GetLength(1);
- //for (int i = 0; i < a1; i++)
- // for (int j = 0; j < a2; j++)
- // array[i, j] = value;
- }
- public override object GetArrayChara(int charano)
- {
- CharacterData chara = varData.CharacterList[charano];
- return chara.DataStringArray2D[VarCodeInt];
- }
- }
- #endregion
- #region 定数
- private abstract class ConstantToken : VariableToken
- {
- public ConstantToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- { throw new CodeEE("読み取り専用の変数" + varName + "に代入しようとしました"); }
- public override void SetValue(string value, Int64[] arguments)
- { throw new CodeEE("読み取り専用の変数" + varName + "に代入しようとしました"); }
- public override void SetValue(Int64[] values, Int64[] arguments)
- { throw new CodeEE("読み取り専用の変数" + varName + "に代入しようとしました"); }
- public override void SetValue(string[] values, Int64[] arguments)
- { throw new CodeEE("読み取り専用の変数" + varName + "に代入しようとしました"); }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- { throw new CodeEE("読み取り専用の変数" + varName + "に代入しようとしました"); }
- }
- private sealed class IntConstantToken : ConstantToken
- {
- public IntConstantToken(VariableCode varCode, VariableData varData, Int64 i)
- : base(varCode, varData)
- {
- this.i = i;
- }
- Int64 i;
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return i;
- }
- }
- private sealed class StrConstantToken : ConstantToken
- {
- public StrConstantToken(VariableCode varCode, VariableData varData, string s)
- : base(varCode, varData)
- {
- this.s = s;
- }
- string s;
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return s;
- }
- }
- private sealed class Int1DConstantToken : ConstantToken
- {
- public Int1DConstantToken(VariableCode varCode, VariableData varData, Int64[] array)
- : base(varCode, varData)
- {
- this.array = array;
- IsForbid = array.Length == 0;
- }
- Int64[] array;
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0]];
- }
- public override Int32 GetLength()
- { return array.Length; }
- public override Int32 GetLength(int dimension)
- {
- if (dimension == 0)
- return array.Length;
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.Length)))
- throw new CodeEE("配列変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- private sealed class Str1DConstantToken : ConstantToken
- {
- string name;
- public Str1DConstantToken(VariableCode varCode, VariableData varData, string[] array)
- : base(varCode, varData)
- {
- this.array = array;
- IsForbid = array.Length == 0;
- name = "Base";
- }
-
- public Str1DConstantToken(VariableCode varCode, VariableData varData, string pname)
- : base(varCode, varData)
- {
- name = pname;
- array = varData.constant.GetCsvNameList(varCode);
- IsForbid = array.Length == 0;
- }
- string[] array;
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- //Changes by Bartoum
- //This is where the _TR files translate. They can only translate stuff that is on a print line
- //Exemple PRINTFORM [%TALENTNAME:X%]
- return Translation.translate(array[arguments[0]], name, translate);
- }
- public override Int32 GetLength()
- { return array.Length; }
- public override Int32 GetLength(int dimension)
- {
- if (dimension == 0)
- return array.Length;
- throw new CodeEE("配列型変数" + varName + "の存在しない次元の長さを取得しようとしました");
- }
- public override object GetArray() { return array; }
- public override void CheckElement(Int64[] arguments, bool[] doCheck)
- {
- if (doCheck[0] && ((arguments[0] < 0) || (arguments[0] >= array.Length)))
- throw new CodeEE("配列変数" + varName + "の第1引数(" + arguments[0] + ")は配列の範囲外です");
- }
- public override void IsArrayRangeValid(Int64[] arguments, Int64 index1, Int64 index2, string funcName, Int64 i1, Int64 i2)
- {
- CheckElement(arguments);
- if ((index1 < 0) || (index1 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i1 + "引数(" + index1 + ")は配列" + varName + "の範囲外です");
- if ((index2 < 0) || (index2 > array.Length))
- throw new CodeEE(funcName + "命令の第" + i2 + "引数(" + index2 + ")は配列" + varName + "の範囲外です");
- }
- }
- #endregion
- #region 特殊処理
- private abstract class PseudoVariableToken : VariableToken
- {
- protected PseudoVariableToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- { throw new CodeEE("擬似変数" + varName + "に代入しようとしました"); }
- public override void SetValue(string value, Int64[] arguments)
- { throw new CodeEE("擬似変数" + varName + "に代入しようとしました"); }
- public override void SetValue(Int64[] values, Int64[] arguments)
- { throw new CodeEE("擬似変数" + varName + "に代入しようとしました"); }
- public override void SetValue(string[] values, Int64[] arguments)
- { throw new CodeEE("擬似変数" + varName + "に代入しようとしました"); }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- { throw new CodeEE("擬似変数" + varName + "に代入しようとしました"); }
- public override Int32 GetLength()
- { throw new CodeEE("擬似変数" + varName + "の長さを取得しようとしました"); }
- public override Int32 GetLength(int dimension)
- { throw new CodeEE("擬似変数" + varName + "の長さを取得しようとしました"); }
- public override object GetArray()
- { throw new CodeEE("擬似変数" + varName + "の配列を取得しようとしました"); }
- }
- private sealed class RandToken : PseudoVariableToken
- {
- public RandToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- Int64 i = arguments[0];
- if (i <= 0)
- throw new CodeEE("RANDの引数に0以下の値(" + i + ")が指定されました");
- return exm.VEvaluator.GetNextRand(i);
- }
- }
- private sealed class CompatiRandToken : PseudoVariableToken
- {
- public CompatiRandToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- Int64 i = arguments[0];
- if (i == 0)
- return 0L;
- if (i < 0)
- i = -i;
- return exm.VEvaluator.GetNextRand(32768) % i;//0-32767の乱数を引数で除算した余り
- }
- }
- private sealed class CHARANUM_Token : PseudoVariableToken
- {
- public CHARANUM_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return varData.CharacterList.Count;
- }
- }
- private sealed class LASTLOAD_TEXT_Token : PseudoVariableToken
- {
- public LASTLOAD_TEXT_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return varData.LastLoadText;
- }
- }
- private sealed class LASTLOAD_VERSION_Token : PseudoVariableToken
- {
- public LASTLOAD_VERSION_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return varData.LastLoadVersion;
- }
- }
- private sealed class LASTLOAD_NO_Token : PseudoVariableToken
- {
- public LASTLOAD_NO_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return varData.LastLoadNo;
- }
- }
- private sealed class LINECOUNT_Token : PseudoVariableToken
- {
- public LINECOUNT_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return exm.Console.LineCount;
- }
- }
- private sealed class WINDOW_TITLE_Token : VariableToken
- {
- public WINDOW_TITLE_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return GlobalStatic.Console.GetWindowTitle();
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- GlobalStatic.Console.SetWindowTitle(value);
- }
- }
- private sealed class MONEYLABEL_Token : VariableToken
- {
- public MONEYLABEL_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return Config.Config.MoneyLabel;
- }
- }
- private sealed class DRAWLINESTR_Token : VariableToken
- {
- public DRAWLINESTR_Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override string GetStrValue(ExpressionMediator exm, long[] arguments, bool translate=false)
- {
- return exm.Console.getDefStBar();
- }
- }
- private sealed class EmptyStrToken : PseudoVariableToken
- {
- public EmptyStrToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return "";
- }
- }
- private sealed class EmptyIntToken : PseudoVariableToken
- {
- public EmptyIntToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return 0L;
- }
- }
- private sealed class Debug__FILE__Token : PseudoVariableToken
- {
- public Debug__FILE__Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- LogicalLine line = exm.Process.GetScaningLine();
- if ((line == null) || (line.Position == null))
- return "";
- return line.Position.Filename;
- }
- }
- private sealed class Debug__FUNCTION__Token : PseudoVariableToken
- {
- public Debug__FUNCTION__Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- LogicalLine line = exm.Process.GetScaningLine();
- if ((line == null) || (line.ParentLabelLine == null))
- return "";//システム待機中のデバッグモードから呼び出し
- return line.ParentLabelLine.LabelName;
- }
- }
- private sealed class Debug__LINE__Token : PseudoVariableToken
- {
- public Debug__LINE__Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- LogicalLine line = exm.Process.GetScaningLine();
- if ((line == null) || (line.Position == null))
- return -1L;
- return line.Position.LineNo;
- }
- }
- private sealed class ISTIMEOUTToken : PseudoVariableToken
- {
- public ISTIMEOUTToken(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = false;
- }
- public override long GetIntValue(ExpressionMediator exm, long[] arguments)
- {
- return Convert.ToInt64(GlobalStatic.Console.IsTimeOut);
- }
- }
- private sealed class __INT_MAX__Token : PseudoVariableToken
- {
- public __INT_MAX__Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override long GetIntValue(ExpressionMediator exm, long[] arguments)
- {
- return Int64.MaxValue;
- }
- }
- private sealed class __INT_MIN__Token : PseudoVariableToken
- {
- public __INT_MIN__Token(VariableCode varCode, VariableData varData)
- : base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override long GetIntValue(ExpressionMediator exm, long[] arguments)
- {
- return Int64.MinValue;
- }
- }
- private sealed class EMUERA_VERSIONToken : PseudoVariableToken
- {
- public EMUERA_VERSIONToken(VariableCode varCode, VariableData varData)
- :base(varCode, varData)
- {
- CanRestructure = true;
- }
- public override string GetStrValue(ExpressionMediator exm, long[] arguments, bool translate=false)
- {
- return GlobalStatic.MainWindow.InternalEmueraVer;
- }
- }
- #endregion
- #region LOCAL
- private sealed class LocalInt1DVariableToken : LocalVariableToken
- {
- public LocalInt1DVariableToken(VariableCode varCode, VariableData varData, string subId, int size)
- : base(varCode, varData, subId, size)
- {
- }
- Int64[] array;
- public override void SetDefault()
- {
- if (array != null)
- Array.Clear(array, 0, size);
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- if (array == null)
- array = new Int64[size];
- return array[arguments[0]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- array = new Int64[size];
- array[arguments[0]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- if (array == null)
- array = new Int64[size];
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- if (array == null)
- array = new Int64[size];
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- array = new Int64[size];
- array[arguments[0]] += value;
- return array[arguments[0]];
- }
- public override object GetArray()
- {
- if (array == null)
- array = new Int64[size];
- return array;
- }
- public override void resize(int newSize)
- {
- size = newSize;
- array = null;
- }
- }
-
- //Bartoum: this is where ARGS and LOCALS are
- private sealed class LocalStr1DVariableToken : LocalVariableToken
- {
- public LocalStr1DVariableToken(VariableCode varCode, VariableData varData, string subId, int size)
- : base(varCode, varData, subId, size)
- {
- }
- string[] array;
- public override void SetDefault()
- {
- if (array != null)
- Array.Clear(array, 0, size);
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- if (array == null)
- array = new string[size];
- return array[arguments[0]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- if (array == null)
- array = new string[size];
- array[arguments[0]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- if (array == null)
- array = new string[size];
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- if (array == null)
- array = new string[size];
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override object GetArray()
- {
- if (array == null)
- array = new string[size];
- return array;
- }
- public override void resize(int newSize)
- {
- size = newSize;
- array = null;
- }
- }
- #endregion
- #region userdef
- //1808beta009 廃止 private static と統合
- //private sealed class UserDefinedInt1DVariableToken : UserDefinedVariableToken
- #region static (広域変数とprivate static の両方を含む)
- private sealed class StaticInt1DVariableToken : UserDefinedVariableToken
- {
- public StaticInt1DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VAR, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = true;
- array = new Int64[sizes[0]];
- defArray = data.DefaultInt;
- if (defArray != null)
- Array.Copy(defArray, array, defArray.Length);
- }
- Int64[] array;
- Int64[] defArray;
- public override void SetDefault()
- {
- Array.Clear(array, 0, totalSize);
- if (defArray != null)
- Array.Copy(defArray, array, defArray.Length);
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0]] += value;
- return array[arguments[0]];
- }
- public override object GetArray() { return array; }
- public override void In() { }
- public override void Out() { }
- }
- private sealed class StaticInt2DVariableToken : UserDefinedVariableToken
- {
- public StaticInt2DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VAR2D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = true;
- array = new Int64[sizes[0], sizes[1]];
- }
- Int64[,] array;
- public override void SetDefault()
- {
- Array.Clear(array, 0, totalSize);
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0], arguments[1]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] += value;
- return array[arguments[0], arguments[1]];
- }
- public override object GetArray() { return array; }
- public override void In() { }
- public override void Out() { }
- }
- private sealed class StaticInt3DVariableToken : UserDefinedVariableToken
- {
- public StaticInt3DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VAR3D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = true;
- array = new Int64[sizes[0], sizes[1], sizes[2]];
- }
- Int64[, ,] array;
- public override void SetDefault()
- {
- Array.Clear(array, 0, totalSize);
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- array[i, j, k] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] += value;
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override object GetArray() { return array; }
- public override void In() { }
- public override void Out() { }
- }
-
-
- //Bartoum: this is where user string variables are
- private sealed class StaticStr1DVariableToken : UserDefinedVariableToken
- {
- public StaticStr1DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VARS, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = true;
- array = new string[sizes[0]];
- defArray = data.DefaultStr;
- if (defArray != null)
- Array.Copy(defArray, array, defArray.Length);
- }
- string[] array;
- string[] defArray;
- public override void SetDefault()
- {
- Array.Clear(array, 0, totalSize);
- if (defArray != null)
- Array.Copy(defArray, array, defArray.Length);
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override object GetArray() { return array; }
- public override void In() { }
- public override void Out() { }
- }
-
-
-
-
-
-
-
-
-
- private sealed class StaticStr2DVariableToken : UserDefinedVariableToken
- {
- public StaticStr2DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VARS2D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = true;
- array = new string[sizes[0], sizes[1]];
- }
- string[,] array;
- public override void SetDefault()
- {
- Array.Clear(array, 0, totalSize);
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0], arguments[1]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override object GetArray() { return array; }
- public override void In() { }
- public override void Out() { }
- }
- private sealed class StaticStr3DVariableToken : UserDefinedVariableToken
- {
- public StaticStr3DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VARS3D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = true;
- array = new string[sizes[0], sizes[1], sizes[2]];
- }
- string[, ,] array;
- public override void SetDefault()
- {
- Array.Clear(array, 0, totalSize);
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- array[i, j, k] = value;
- }
- public override object GetArray() { return array; }
- public override void In() { }
- public override void Out() { }
- }
- #endregion
- #region private dynamic
- private sealed class PrivateInt1DVariableToken : UserDefinedVariableToken
- {
- public PrivateInt1DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VAR, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = false;
- arrayList = new List<Int64[]>();
- defArray = data.DefaultInt;
- }
- readonly List<Int64[]> arrayList;
- Int64[] array;
- Int64[] defArray;
- //int counter = 0;
- public override void SetDefault()
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0]] += value;
- return array[arguments[0]];
- }
- public override object GetArray() { return array; }
- public override void In()
- {
- if (array != null)
- arrayList.Add(array);
- //counter++;
- array = new Int64[sizes[0]];
- if (defArray != null)
- Array.Copy(defArray, array, defArray.Length);
- }
- public override void Out()
- {
- //counter--;
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- }
- }
- private sealed class PrivateInt2DVariableToken : UserDefinedVariableToken
- {
- public PrivateInt2DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VAR2D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = false;
- arrayList = new List<Int64[,]>();
- }
- readonly List<Int64[,]> arrayList;
- Int64[,] array;
- //int counter = 0;
- public override void SetDefault() { }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0], arguments[1]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] += value;
- return array[arguments[0], arguments[1]];
- }
- public override object GetArray() { return array; }
- public override void In()
- {
- if (array != null)
- arrayList.Add(array);
- //counter++;
- array = new Int64[sizes[0], sizes[1]];
- }
- public override void Out()
- {
- //counter--;
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- }
- }
- private sealed class PrivateInt3DVariableToken : UserDefinedVariableToken
- {
- public PrivateInt3DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VAR3D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = false;
- arrayList = new List<Int64[, ,]>();
- }
- readonly List<Int64[, ,]> arrayList;
- Int64[, ,] array;
- //int counter = 0;
- public override void SetDefault() { }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- array[i, j, k] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] += value;
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override object GetArray() { return array; }
- public override void In()
- {
- if (array != null)
- arrayList.Add(array);
- //counter++;
- array = new Int64[sizes[0], sizes[1], sizes[2]];
- }
- public override void Out()
- {
- //counter--;
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- }
- }
- private sealed class PrivateStr1DVariableToken : UserDefinedVariableToken
- {
- public PrivateStr1DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VARS, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = false;
- arrayList = new List<string[]>();
- defArray = data.DefaultStr;
- }
- //int counter = 0;
- readonly List<string[]> arrayList;
- string[] array;
- string[] defArray;
- public override void SetDefault()
- {
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override object GetArray() { return array; }
- public override void In()
- {
- //counter++;
- if (array != null)
- arrayList.Add(array);
- array = new string[sizes[0]];
- if (defArray != null)
- Array.Copy(defArray, array, defArray.Length);
- //arrayList.Add(array);
- }
- public override void Out()
- {
- //counter--;
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- }
- }
- private sealed class PrivateStr2DVariableToken : UserDefinedVariableToken
- {
- public PrivateStr2DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VARS2D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = false;
- arrayList = new List<string[,]>();
- }
- //int counter = 0;
- readonly List<string[,]> arrayList;
- string[,] array;
- public override void SetDefault()
- {
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0], arguments[1]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override object GetArray() { return array; }
- public override void In()
- {
- //counter++;
- if (array != null)
- arrayList.Add(array);
- array = new string[sizes[0], sizes[1]];
- //arrayList.Add(array);
- }
- public override void Out()
- {
- //counter--;
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- }
- }
- private sealed class PrivateStr3DVariableToken : UserDefinedVariableToken
- {
- public PrivateStr3DVariableToken(UserDefinedVariableData data)
- : base(VariableCode.VARS3D, data)
- {
- int[] sizes = data.Lengths;
- IsStatic = false;
- arrayList = new List<string[, ,]>();
- }
- //int counter = 0;
- readonly List<string[, ,]> arrayList;
- string[, ,] array;
- public override void SetDefault() { }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- return array[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- array[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- array[i, j, k] = value;
- }
- public override object GetArray() { return array; }
- public override void In()
- {
- //counter++;
- if (array != null)
- arrayList.Add(array);
- array = new string[sizes[0], sizes[1], sizes[2]];
- //arrayList.Add(array);
- }
- public override void Out()
- {
- //counter--;
- //arrayList.RemoveAt(arrayList.Count - 1);
- if (arrayList.Count > 0)
- {
- array = arrayList[arrayList.Count - 1];
- arrayList.RemoveAt(arrayList.Count - 1);
- }
- else
- array = null;
- }
- }
- #endregion
- #region ref
- //1808beta009で追加
- /// <summary>
- /// public staticとprivate dynamicをクラスレベルでは区別しない
- /// 1808beta009時点ではprivate dynamicのみ
- /// </summary>
- private sealed class ReferenceInt1DToken : ReferenceToken
- {
- public ReferenceInt1DToken(UserDefinedVariableData data)
- : base(VariableCode.REF, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return ((Int64[])array)[arguments[0]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((Int64[])array)[arguments[0]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- ((Int64[])array)[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- for (int i = start; i < end; i++)
- ((Int64[])array)[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((Int64[])array)[arguments[0]] += value;
- return ((Int64[])array)[arguments[0]];
- }
- }
- private sealed class ReferenceInt2DToken : ReferenceToken
- {
- public ReferenceInt2DToken(UserDefinedVariableData data)
- : base(VariableCode.REF2D, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return ((Int64[,])array)[arguments[0], arguments[1]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((Int64[,])array)[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- ((Int64[,])array)[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- ((Int64[,])array)[i, j] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((Int64[,])array)[arguments[0], arguments[1]] += value;
- return ((Int64[,])array)[arguments[0], arguments[1]];
- }
- }
- private sealed class ReferenceInt3DToken : ReferenceToken
- {
- public ReferenceInt3DToken(UserDefinedVariableData data)
- : base(VariableCode.REF3D, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return ((Int64[, ,])array)[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((Int64[, ,])array)[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- ((Int64[, ,])array)[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- ((Int64[, ,])array)[i, j, k] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((Int64[, ,])array)[arguments[0], arguments[1], arguments[2]] += value;
- return ((Int64[, ,])array)[arguments[0], arguments[1], arguments[2]];
- }
- }
- private sealed class ReferenceStr1DToken : ReferenceToken
- {
- public ReferenceStr1DToken(UserDefinedVariableData data)
- : base(VariableCode.REFS, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return ((string[])array)[arguments[0]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((string[])array)[arguments[0]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- int start = (int)arguments[0];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- ((string[])array)[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- for (int i = start; i < end; i++)
- ((string[])array)[i] = value;
- }
- }
- private sealed class ReferenceStr2DToken : ReferenceToken
- {
- public ReferenceStr2DToken(UserDefinedVariableData data)
- : base(VariableCode.REFS2D, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return ((string[,])array)[arguments[0], arguments[1]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((string[,])array)[arguments[0], arguments[1]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- ((string[,])array)[arguments[0], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- ((string[,])array)[i, j] = value;
- }
- }
- private sealed class ReferenceStr3DToken : ReferenceToken
- {
- public ReferenceStr3DToken(UserDefinedVariableData data)
- : base(VariableCode.REFS3D, data)
- {
- CanRestructure = false;
- IsStatic = !data.Private;
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- return ((string[, ,])array)[arguments[0], arguments[1], arguments[2]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- if (array == null)
- throw new CodeEE("参照型変数" + varName + "は何も参照していません");
- ((string[, ,])array)[arguments[0], arguments[1], arguments[2]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- int start = (int)arguments[2];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- ((string[, ,])array)[arguments[0], arguments[1], i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- int a1 = array.GetLength(0);
- int a2 = array.GetLength(1);
- int a3 = array.GetLength(2);
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- for (int k = 0; k < a3; k++)
- ((string[, ,])array)[i, j, k] = value;
- }
- }
- #endregion
- #region chara (広域のみ)
- private sealed class UserDefinedCharaInt1DVariableToken : UserDefinedCharaVariableToken
- {
- public UserDefinedCharaInt1DVariableToken(UserDefinedVariableData data, VariableData varData, int arrayIndex)
- : base(VariableCode.CVAR, data, varData, arrayIndex)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- Int64[] array = (Int64[])GetArrayChara((int)arguments[0]);
- return array[arguments[1]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- Int64[] array = (Int64[])GetArrayChara((int)arguments[0]);
- array[arguments[1]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- Int64[] array = (Int64[])GetArrayChara((int)arguments[0]);
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- Int64[] array = (Int64[])GetArrayChara(charaPos);
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- Int64[] array = (Int64[])GetArrayChara((int)arguments[0]);
- array[arguments[1]] += value;
- return array[arguments[1]];
- }
- }
- private sealed class UserDefinedCharaStr1DVariableToken : UserDefinedCharaVariableToken
- {
- public UserDefinedCharaStr1DVariableToken(UserDefinedVariableData data, VariableData varData, int arrayIndex)
- : base(VariableCode.CVARS, data, varData, arrayIndex)
- {
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- string[] array = (string[])GetArrayChara((int)arguments[0]);
- return array[arguments[1]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- string[] array = (string[])GetArrayChara((int)arguments[0]);
- array[arguments[1]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- string[] array = (string[])GetArrayChara((int)arguments[0]);
- int start = (int)arguments[1];
- int end = start + values.Length;
- for (int i = start; i < end; i++)
- array[i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- string[] array = (string[])GetArrayChara(charaPos);
- for (int i = start; i < end; i++)
- array[i] = value;
- }
- }
- private sealed class UserDefinedCharaInt2DVariableToken : UserDefinedCharaVariableToken
- {
- public UserDefinedCharaInt2DVariableToken(UserDefinedVariableData data, VariableData varData, int arrayIndex)
- : base(VariableCode.CVAR2D, data, varData, arrayIndex)
- {
- }
- public override Int64 GetIntValue(ExpressionMediator exm, Int64[] arguments)
- {
- Int64[,] array = (Int64[,])GetArrayChara((int)arguments[0]);
- return array[arguments[1], arguments[2]];
- }
- public override void SetValue(Int64 value, Int64[] arguments)
- {
- Int64[,] array = (Int64[,])GetArrayChara((int)arguments[0]);
- array[arguments[1], arguments[2]] = value;
- }
- public override void SetValue(Int64[] values, Int64[] arguments)
- {
- Int64[,] array = (Int64[,])GetArrayChara((int)arguments[0]);
- int start = (int)arguments[2];
- int end = start + values.Length;
- int index1 = (int)arguments[1];
- for (int i = start; i < end; i++)
- array[index1, i] = values[i - start];
- }
- public override void SetValueAll(long value, int start, int end, int charaPos)
- {
- Int64[,] array = (Int64[,])GetArrayChara(charaPos);
- int a1 = sizes[0];
- int a2 = sizes[1];
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- public override Int64 PlusValue(Int64 value, Int64[] arguments)
- {
- Int64[,] array = (Int64[,])GetArrayChara((int)arguments[0]);
- array[arguments[1], arguments[2]] += value;
- return array[arguments[1], arguments[2]];
- }
- }
- private sealed class UserDefinedCharaStr2DVariableToken : UserDefinedCharaVariableToken
- {
- public UserDefinedCharaStr2DVariableToken(UserDefinedVariableData data, VariableData varData, int arrayIndex)
- : base(VariableCode.CVARS2D, data, varData, arrayIndex)
- {
- }
- public override string GetStrValue(ExpressionMediator exm, Int64[] arguments, bool translate = false)
- {
- string[,] array = (string[,])GetArrayChara((int)arguments[0]);
- return array[arguments[1], arguments[2]];
- }
- public override void SetValue(string value, Int64[] arguments)
- {
- string[,] array = (string[,])GetArrayChara((int)arguments[0]);
- array[arguments[1], arguments[2]] = value;
- }
- public override void SetValue(string[] values, Int64[] arguments)
- {
- string[,] array = (string[,])GetArrayChara((int)arguments[0]);
- int start = (int)arguments[2];
- int end = start + values.Length;
- int index1 = (int)arguments[1];
- for (int i = start; i < end; i++)
- array[index1, i] = values[i - start];
- }
- public override void SetValueAll(string value, int start, int end, int charaPos)
- {
- string[,] array = (string[,])GetArrayChara(charaPos);
- int a1 = sizes[0];
- int a2 = sizes[1];
- for (int i = 0; i < a1; i++)
- for (int j = 0; j < a2; j++)
- array[i, j] = value;
- }
- }
- #endregion
- #endregion
- }
- }
|