12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890 |
-
-
- //------------------------------------------------------------------------------
- // <auto-generated>
- // This code was generated by a tool.
- //
- // TextTransform Samples/Packages/com.unity.collections/Unity.Collections/FixedString.tt
- //
- // Changes to this file may cause incorrect behavior and will be lost if
- // the code is regenerated.
- // </auto-generated>
- //------------------------------------------------------------------------------
-
- using System.Collections.Generic;
- using System.Collections;
- using System.Diagnostics;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System;
- using Unity.Collections.LowLevel.Unsafe;
- using Unity.Mathematics;
- using UnityEngine.Internal;
- using UnityEngine;
- #if UNITY_PROPERTIES_EXISTS
- using Unity.Properties;
- #endif
-
- namespace Unity.Collections
- {
- // A temporary copy of a struct is made before it is displayed in a C# debugger.
- // However, only the first element of data members with names is copied at this time.
- // Therefore, it's important that all data visible in the debugger, has a name
- // and includes no 'fixed' array. This is why we name every byte in the following struct.
-
- /// <summary>
- /// <undoc /> [FixedBytes will be removed]
- /// </summary>
- [Serializable]
- [StructLayout(LayoutKind.Explicit, Size=16)]
- [BurstCompatible]
- public struct FixedBytes16
- {
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(0)] public byte byte0000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1)] public byte byte0001;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2)] public byte byte0002;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3)] public byte byte0003;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4)] public byte byte0004;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(5)] public byte byte0005;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(6)] public byte byte0006;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(7)] public byte byte0007;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(8)] public byte byte0008;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(9)] public byte byte0009;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(10)] public byte byte0010;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(11)] public byte byte0011;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(12)] public byte byte0012;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(13)] public byte byte0013;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(14)] public byte byte0014;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(15)] public byte byte0015;
-
- }
-
-
- // A temporary copy of a struct is made before it is displayed in a C# debugger.
- // However, only the first element of data members with names is copied at this time.
- // Therefore, it's important that all data visible in the debugger, has a name
- // and includes no 'fixed' array. This is why we name every byte in the following struct.
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [Serializable]
- [StructLayout(LayoutKind.Explicit, Size=30)]
- [BurstCompatible]
- public struct FixedBytes30
- {
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(0)] public FixedBytes16 offset0000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(16)] public byte byte0016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(17)] public byte byte0017;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(18)] public byte byte0018;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(19)] public byte byte0019;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(20)] public byte byte0020;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(21)] public byte byte0021;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(22)] public byte byte0022;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(23)] public byte byte0023;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(24)] public byte byte0024;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(25)] public byte byte0025;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(26)] public byte byte0026;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(27)] public byte byte0027;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(28)] public byte byte0028;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(29)] public byte byte0029;
-
- }
- [Obsolete("Renamed to FixedString32Bytes (UnityUpgradable) -> FixedString32Bytes", true)]
- public partial struct FixedString32 {}
-
- /// <summary>
- /// An unmanaged UTF-8 string whose content is stored directly in the 32-byte struct.
- /// </summary>
- /// <remarks>
- /// The binary layout of this string is guaranteed, for now and all time, to be a length (a little-endian two byte integer)
- /// followed by the bytes of the characters (with no padding). A zero byte always immediately follows the last character.
- /// Effectively, the number of bytes for storing characters is 3 less than 32 (two length bytes and one null byte).
- ///
- /// This layout is identical to a <see cref="FixedList32Bytes{T}"/> of bytes, thus allowing reinterpretation between FixedString32Bytes and FixedList32Bytes.
- ///
- /// By virtue of being an unmanaged, non-allocated struct with no pointers, this string is fully compatible with jobs and Burst compilation.
- /// Unlike managed string types, these strings can be put in any unmanaged ECS components, FixedList, or any other unmanaged structs.
- /// </remarks>
- [Serializable]
- [StructLayout(LayoutKind.Sequential, Size=32)]
- [BurstCompatible]
- public partial struct FixedString32Bytes
- : INativeList<byte>
- , IUTF8Bytes
- , IComparable<String>
- , IEquatable<String>
- , IComparable<FixedString32Bytes>
- , IEquatable<FixedString32Bytes>
- , IComparable<FixedString64Bytes>
- , IEquatable<FixedString64Bytes>
- , IComparable<FixedString128Bytes>
- , IEquatable<FixedString128Bytes>
- , IComparable<FixedString512Bytes>
- , IEquatable<FixedString512Bytes>
- , IComparable<FixedString4096Bytes>
- , IEquatable<FixedString4096Bytes>
- {
- internal const ushort utf8MaxLengthInBytes = 29;
-
- [SerializeField] internal ushort utf8LengthInBytes;
- [SerializeField] internal FixedBytes30 bytes;
-
- /// <summary>
- /// Returns the maximum number of UTF-8 bytes that can be stored in this string.
- /// </summary>
- /// <returns>
- /// The maximum number of UTF-8 bytes that can be stored in this string.
- /// </returns>
- public static int UTF8MaxLengthInBytes => utf8MaxLengthInBytes;
-
- /// <summary>
- /// For internal use only. Use <see cref="ToString"/> instead.
- /// </summary>
- /// <value>For internal use only. Use <see cref="ToString"/> instead.</value>
- [CreateProperty]
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
- [NotBurstCompatible]
- public string Value => ToString();
-
- /// <summary>
- /// Returns a pointer to the character bytes.
- /// </summary>
- /// <returns>A pointer to the character bytes.</returns>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe byte* GetUnsafePtr()
- {
- return (byte*) UnsafeUtility.AddressOf(ref bytes);
- }
-
- /// <summary>
- /// The current length in bytes of this string's content.
- /// </summary>
- /// <remarks>
- /// The length value does not include the null-terminator byte.
- /// </remarks>
- /// <param name="value">The new length in bytes of the string's content.</param>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if the new length is out of bounds.</exception>
- /// <value>
- /// The current length in bytes of this string's content.
- /// </value>
- public int Length
- {
- get
- {
- return utf8LengthInBytes;
- }
- set
- {
- CheckLengthInRange(value);
- utf8LengthInBytes = (ushort)value;
- unsafe
- {
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- }
- }
-
- /// <summary>
- /// The number of bytes this string has for storing UTF-8 characters.
- /// </summary>
- /// <value>The number of bytes this string has for storing UTF-8 characters.</value>
- /// <remarks>
- /// Does not include the null-terminator byte.
- ///
- /// A setter is included for conformity with <see cref="INativeList{T}"/>, but <see cref="Capacity"/> is fixed at 29.
- /// Setting the value to anything other than 29 throws an exception.
- ///
- /// In UTF-8 encoding, each Unicode code point (character) requires 1 to 4 bytes,
- /// so the number of characters that can be stored may be less than the capacity.
- /// </remarks>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to set the capacity to anything other than 29.</exception>
- public int Capacity
- {
- get
- {
- return utf8MaxLengthInBytes;
- }
- set
- {
- CheckCapacityInRange(value);
- }
- }
-
- /// <summary>
- /// Attempts to set the length in bytes. Does nothing if the new length is invalid.
- /// </summary>
- /// <param name="newLength">The desired length.</param>
- /// <param name="clearOptions">Whether added or removed bytes should be cleared (zeroed). (Increasing the length adds bytes; decreasing the length removes bytes.)</param>
- /// <returns>True if the new length is valid.</returns>
- public bool TryResize(int newLength, NativeArrayOptions clearOptions = NativeArrayOptions.ClearMemory)
- {
- if (newLength < 0 || newLength > utf8MaxLengthInBytes)
- return false;
- if (newLength == utf8LengthInBytes)
- return true;
- unsafe
- {
- if (clearOptions == NativeArrayOptions.ClearMemory)
- {
- if (newLength > utf8LengthInBytes)
- UnsafeUtility.MemClear(GetUnsafePtr() + utf8LengthInBytes, newLength - utf8LengthInBytes);
- else
- UnsafeUtility.MemClear(GetUnsafePtr() + newLength, utf8LengthInBytes - newLength);
- }
- utf8LengthInBytes = (ushort)newLength;
- // always null terminate
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- return true;
- }
-
- /// <summary>
- /// Returns true if this string is empty (has no characters).
- /// </summary>
- /// <value>True if this string is empty (has no characters).</value>
- public bool IsEmpty => utf8LengthInBytes == 0;
-
- /// <summary>
- /// Returns the byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <value>The byte at the index.</value>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public byte this[int index]
- {
- get
- {
- unsafe
- {
- CheckIndexInRange(index);
- return GetUnsafePtr()[index];
- }
- }
-
- set
- {
- unsafe
- {
- CheckIndexInRange(index);
- GetUnsafePtr()[index] = value;
- }
- }
- }
-
-
- /// <summary>
- /// Returns the reference to a byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <returns>A reference to the byte at the index.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public ref byte ElementAt(int index)
- {
- unsafe
- {
- CheckIndexInRange(index);
- return ref GetUnsafePtr()[index];
- }
- }
-
- /// <summary>
- /// Sets the length to 0.
- /// </summary>
- public void Clear()
- {
- Length = 0;
- }
-
- /// <summary>
- /// Appends a byte.
- /// </summary>
- /// <remarks>
- /// A zero byte will always follow the newly appended byte.
- ///
- /// No validation is performed: it is your responsibility for the bytes of the string to form valid UTF-8 when you're done appending bytes.
- /// </remarks>
- /// <param name="value">A byte to append.</param>
- public void Add(in byte value)
- {
- this[Length++] = value;
- }
-
- /// <summary>
- /// An enumerator over the characters (not bytes) of a FixedString32Bytes.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// The first <see cref="MoveNext"/> call advances the enumerator's index to the first character.
- /// </remarks>
- public struct Enumerator : IEnumerator
- {
- FixedString32Bytes target;
- int offset;
- Unicode.Rune current;
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes.Enumerator.
- /// </summary>
- /// <param name="other">A FixeString32 for which to create an enumerator.</param>
- public Enumerator(FixedString32Bytes other)
- {
- target = other;
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// Does nothing.
- /// </summary>
- public void Dispose()
- {
- }
-
-
- /// <summary>
- /// Advances the enumerator to the next character.
- /// </summary>
- /// <returns>True if <see cref="Current"/> is valid to read after the call.</returns>
- public bool MoveNext()
- {
- if (offset >= target.Length)
- return false;
-
- unsafe
- {
- Unicode.Utf8ToUcs(out current, target.GetUnsafePtr(), ref offset, target.Length);
- }
-
- return true;
- }
-
- /// <summary>
- /// Resets the enumerator to its initial state.
- /// </summary>
- public void Reset()
- {
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// The current character.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// </remarks>
- /// <value>The current character.</value>
- public Unicode.Rune Current => current;
-
- object IEnumerator.Current => Current;
- }
-
- /// <summary>
- /// Returns an enumerator for iterating over the characters of this string.
- /// </summary>
- /// <returns>An enumerator for iterating over the characters of the FixedString32Bytes.</returns>
- public Enumerator GetEnumerator()
- {
- return new Enumerator(this);
- }
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A `System.String` to compare with.</param>
- /// <returns>An integer denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other string.<br/>
- /// +1 denotes that this string should be sorted to follow the other string.<br/>
- /// </returns>
- [NotBurstCompatible]
- public int CompareTo(String other)
- {
- return ToString().CompareTo(other);
- }
-
- /// <summary>
- /// Returns true if this string and another have the same length and all the same characters.
- /// </summary>
- /// <param name="other">A string to compare for equality.</param>
- /// <returns>True if this string and the other have the same length and all the same characters.</returns>
- [NotBurstCompatible]
- public bool Equals(String other)
- {
- unsafe {
- int alen = utf8LengthInBytes;
- int blen = other.Length;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(bytes);
- fixed(char* bptr = other)
- {
- return UTF8ArrayUnsafeUtility.StrCmp(aptr, alen, bptr, blen) == 0;
- }
- }
- }
-
- /// <summary>
- /// Returns a reference to a FixedList32Bytes<byte> representation of this string.
- /// </summary>
- /// <remarks>
- /// The referenced FixedListByte32 is the very same bytes as the original FixedString32Bytes,
- /// so it is only valid as long as the original FixedString32Bytes is valid.
- /// </remarks>
- /// <returns>A ref to a FixedListByte32 representation of the FixedString32Bytes.</returns>
- public unsafe ref FixedList32Bytes<byte> AsFixedList()
- {
- return ref UnsafeUtility.AsRef<FixedList32Bytes<byte>>(UnsafeUtility.AddressOf(ref this));
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- [NotBurstCompatible]
- public FixedString32Bytes(String source)
- {
- this = default;
- var error = Initialize(source);
- CheckCopyError((CopyError)error, source);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- [NotBurstCompatible]
- internal int Initialize(String source)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe
- {
- fixed (char* sourceptr = source)
- {
- var error = UTF8ArrayUnsafeUtility.Copy(GetUnsafePtr(), out utf8LengthInBytes, utf8MaxLengthInBytes, sourceptr, source.Length);
- if(error != CopyError.None)
- return (int)error;
- this.Length = utf8LengthInBytes;
- }
- }
- return 0;
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- public FixedString32Bytes(Unicode.Rune rune, int count = 1)
- {
- this = default;
- Initialize(rune, count);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(Unicode.Rune rune, int count = 1)
- {
- this = default;
- return (int)this.Append(rune, count);
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString32Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString32Bytes.</exception>
- public FixedString32Bytes(in FixedString32Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString32Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for equality.</param>
- /// <param name="b">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString32Bytes a, in FixedString32Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString32Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString32Bytes a, in FixedString32Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString32Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString64Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString32Bytes.</exception>
- public FixedString32Bytes(in FixedString64Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString64Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for equality.</param>
- /// <param name="b">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString32Bytes a, in FixedString64Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString64Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString32Bytes a, in FixedString64Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString64Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString32Bytes to copy.</param>
- /// <returns>A new FixedString64Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- public static implicit operator FixedString64Bytes(in FixedString32Bytes fs) => new FixedString64Bytes(in fs);
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString128Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString32Bytes.</exception>
- public FixedString32Bytes(in FixedString128Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString128Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for equality.</param>
- /// <param name="b">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString32Bytes a, in FixedString128Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString128Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString32Bytes a, in FixedString128Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString128Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString32Bytes to copy.</param>
- /// <returns>A new FixedString128Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public static implicit operator FixedString128Bytes(in FixedString32Bytes fs) => new FixedString128Bytes(in fs);
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString512Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString32Bytes.</exception>
- public FixedString32Bytes(in FixedString512Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString512Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for equality.</param>
- /// <param name="b">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString32Bytes a, in FixedString512Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString512Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString32Bytes a, in FixedString512Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString512Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString32Bytes to copy.</param>
- /// <returns>A new FixedString512Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public static implicit operator FixedString512Bytes(in FixedString32Bytes fs) => new FixedString512Bytes(in fs);
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString4096Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString32Bytes.</exception>
- public FixedString32Bytes(in FixedString4096Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString4096Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for equality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString32Bytes a, in FixedString4096Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString32Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString32Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString32Bytes a, in FixedString4096Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString4096Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString32Bytes to copy.</param>
- /// <returns>A new FixedString4096Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public static implicit operator FixedString4096Bytes(in FixedString32Bytes fs) => new FixedString4096Bytes(in fs);
-
- /// <summary>
- /// Returns a new FixedString32Bytes that is a copy of another string.
- /// </summary>
- /// <param name="b">A string to copy.</param>
- /// <returns>A new FixedString32Bytes that is a copy of another string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString32Bytes.</exception>
- [NotBurstCompatible]
- public static implicit operator FixedString32Bytes(string b) => new FixedString32Bytes(b);
-
- /// <summary>
- /// Returns a new managed string that is a copy of this string.
- /// </summary>
- /// <returns>A new managed string that is a copy of this string.</returns>
- [NotBurstCompatible]
- public override String ToString()
- {
- return this.ConvertToString();
- }
-
- /// <summary>
- /// Returns a hash code of this string.
- /// </summary>
- /// <remarks>Only the character bytes are included in the hash: any bytes beyond <see cref="Length"/> are not part of the hash.</remarks>
- /// <returns>The hash code of this string.</returns>
- public override int GetHashCode()
- {
- return this.ComputeHashCode();
- }
-
- /// <summary>
- /// Returns true if this string and an object are equal.
- /// </summary>
- /// <remarks>
- /// Returns false if the object is neither a System.String or a FixedString.
- ///
- /// Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="obj">An object to compare for equality.</param>
- /// <returns>True if this string and the object are equal.</returns>
- [NotBurstCompatible]
- public override bool Equals(object obj)
- {
- if(ReferenceEquals(null, obj)) return false;
- if(obj is String aString) return Equals(aString);
- if(obj is FixedString32Bytes aFixedString32Bytes) return Equals(aFixedString32Bytes);
- if(obj is FixedString64Bytes aFixedString64Bytes) return Equals(aFixedString64Bytes);
- if(obj is FixedString128Bytes aFixedString128Bytes) return Equals(aFixedString128Bytes);
- if(obj is FixedString512Bytes aFixedString512Bytes) return Equals(aFixedString512Bytes);
- if(obj is FixedString4096Bytes aFixedString4096Bytes) return Equals(aFixedString4096Bytes);
- return false;
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckIndexInRange(int index)
- {
- if (index < 0)
- throw new IndexOutOfRangeException($"Index {index} must be positive.");
- if (index >= utf8LengthInBytes)
- throw new IndexOutOfRangeException($"Index {index} is out of range in FixedString32Bytes of '{utf8LengthInBytes}' Length.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckLengthInRange(int length)
- {
- if (length < 0)
- throw new ArgumentOutOfRangeException($"Length {length} must be positive.");
- if (length > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Length {length} is out of range in FixedString32Bytes of '{utf8MaxLengthInBytes}' Capacity.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckCapacityInRange(int capacity)
- {
- if (capacity > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Capacity {capacity} must be lower than {utf8MaxLengthInBytes}.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckCopyError(CopyError error, String source)
- {
- if (error != CopyError.None)
- throw new ArgumentException($"FixedString32Bytes: {error} while copying \"{source}\"");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckFormatError(FormatError error)
- {
- if (error != FormatError.None)
- throw new ArgumentException("Source is too long to fit into fixed string of this size");
- }
- }
-
- // A temporary copy of a struct is made before it is displayed in a C# debugger.
- // However, only the first element of data members with names is copied at this time.
- // Therefore, it's important that all data visible in the debugger, has a name
- // and includes no 'fixed' array. This is why we name every byte in the following struct.
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [Serializable]
- [StructLayout(LayoutKind.Explicit, Size=62)]
- [BurstCompatible]
- public struct FixedBytes62
- {
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(0)] public FixedBytes16 offset0000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(16)] public FixedBytes16 offset0016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(32)] public FixedBytes16 offset0032;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(48)] public byte byte0048;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(49)] public byte byte0049;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(50)] public byte byte0050;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(51)] public byte byte0051;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(52)] public byte byte0052;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(53)] public byte byte0053;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(54)] public byte byte0054;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(55)] public byte byte0055;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(56)] public byte byte0056;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(57)] public byte byte0057;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(58)] public byte byte0058;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(59)] public byte byte0059;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(60)] public byte byte0060;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(61)] public byte byte0061;
-
- }
- [Obsolete("Renamed to FixedString64Bytes (UnityUpgradable) -> FixedString64Bytes", true)]
- public partial struct FixedString64 {}
-
- /// <summary>
- /// An unmanaged UTF-8 string whose content is stored directly in the 64-byte struct.
- /// </summary>
- /// <remarks>
- /// The binary layout of this string is guaranteed, for now and all time, to be a length (a little-endian two byte integer)
- /// followed by the bytes of the characters (with no padding). A zero byte always immediately follows the last character.
- /// Effectively, the number of bytes for storing characters is 3 less than 64 (two length bytes and one null byte).
- ///
- /// This layout is identical to a <see cref="FixedList64Bytes{T}"/> of bytes, thus allowing reinterpretation between FixedString64Bytes and FixedList64Bytes.
- ///
- /// By virtue of being an unmanaged, non-allocated struct with no pointers, this string is fully compatible with jobs and Burst compilation.
- /// Unlike managed string types, these strings can be put in any unmanaged ECS components, FixedList, or any other unmanaged structs.
- /// </remarks>
- [Serializable]
- [StructLayout(LayoutKind.Sequential, Size=64)]
- [BurstCompatible]
- public partial struct FixedString64Bytes
- : INativeList<byte>
- , IUTF8Bytes
- , IComparable<String>
- , IEquatable<String>
- , IComparable<FixedString32Bytes>
- , IEquatable<FixedString32Bytes>
- , IComparable<FixedString64Bytes>
- , IEquatable<FixedString64Bytes>
- , IComparable<FixedString128Bytes>
- , IEquatable<FixedString128Bytes>
- , IComparable<FixedString512Bytes>
- , IEquatable<FixedString512Bytes>
- , IComparable<FixedString4096Bytes>
- , IEquatable<FixedString4096Bytes>
- {
- internal const ushort utf8MaxLengthInBytes = 61;
-
- [SerializeField] internal ushort utf8LengthInBytes;
- [SerializeField] internal FixedBytes62 bytes;
-
- /// <summary>
- /// Returns the maximum number of UTF-8 bytes that can be stored in this string.
- /// </summary>
- /// <returns>
- /// The maximum number of UTF-8 bytes that can be stored in this string.
- /// </returns>
- public static int UTF8MaxLengthInBytes => utf8MaxLengthInBytes;
-
- /// <summary>
- /// For internal use only. Use <see cref="ToString"/> instead.
- /// </summary>
- /// <value>For internal use only. Use <see cref="ToString"/> instead.</value>
- [CreateProperty]
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
- [NotBurstCompatible]
- public string Value => ToString();
-
- /// <summary>
- /// Returns a pointer to the character bytes.
- /// </summary>
- /// <returns>A pointer to the character bytes.</returns>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe byte* GetUnsafePtr()
- {
- return (byte*) UnsafeUtility.AddressOf(ref bytes);
- }
-
- /// <summary>
- /// The current length in bytes of this string's content.
- /// </summary>
- /// <remarks>
- /// The length value does not include the null-terminator byte.
- /// </remarks>
- /// <param name="value">The new length in bytes of the string's content.</param>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if the new length is out of bounds.</exception>
- /// <value>
- /// The current length in bytes of this string's content.
- /// </value>
- public int Length
- {
- get
- {
- return utf8LengthInBytes;
- }
- set
- {
- CheckLengthInRange(value);
- utf8LengthInBytes = (ushort)value;
- unsafe
- {
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- }
- }
-
- /// <summary>
- /// The number of bytes this string has for storing UTF-8 characters.
- /// </summary>
- /// <value>The number of bytes this string has for storing UTF-8 characters.</value>
- /// <remarks>
- /// Does not include the null-terminator byte.
- ///
- /// A setter is included for conformity with <see cref="INativeList{T}"/>, but <see cref="Capacity"/> is fixed at 61.
- /// Setting the value to anything other than 61 throws an exception.
- ///
- /// In UTF-8 encoding, each Unicode code point (character) requires 1 to 4 bytes,
- /// so the number of characters that can be stored may be less than the capacity.
- /// </remarks>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to set the capacity to anything other than 61.</exception>
- public int Capacity
- {
- get
- {
- return utf8MaxLengthInBytes;
- }
- set
- {
- CheckCapacityInRange(value);
- }
- }
-
- /// <summary>
- /// Attempts to set the length in bytes. Does nothing if the new length is invalid.
- /// </summary>
- /// <param name="newLength">The desired length.</param>
- /// <param name="clearOptions">Whether added or removed bytes should be cleared (zeroed). (Increasing the length adds bytes; decreasing the length removes bytes.)</param>
- /// <returns>True if the new length is valid.</returns>
- public bool TryResize(int newLength, NativeArrayOptions clearOptions = NativeArrayOptions.ClearMemory)
- {
- if (newLength < 0 || newLength > utf8MaxLengthInBytes)
- return false;
- if (newLength == utf8LengthInBytes)
- return true;
- unsafe
- {
- if (clearOptions == NativeArrayOptions.ClearMemory)
- {
- if (newLength > utf8LengthInBytes)
- UnsafeUtility.MemClear(GetUnsafePtr() + utf8LengthInBytes, newLength - utf8LengthInBytes);
- else
- UnsafeUtility.MemClear(GetUnsafePtr() + newLength, utf8LengthInBytes - newLength);
- }
- utf8LengthInBytes = (ushort)newLength;
- // always null terminate
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- return true;
- }
-
- /// <summary>
- /// Returns true if this string is empty (has no characters).
- /// </summary>
- /// <value>True if this string is empty (has no characters).</value>
- public bool IsEmpty => utf8LengthInBytes == 0;
-
- /// <summary>
- /// Returns the byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <value>The byte at the index.</value>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public byte this[int index]
- {
- get
- {
- unsafe
- {
- CheckIndexInRange(index);
- return GetUnsafePtr()[index];
- }
- }
-
- set
- {
- unsafe
- {
- CheckIndexInRange(index);
- GetUnsafePtr()[index] = value;
- }
- }
- }
-
-
- /// <summary>
- /// Returns the reference to a byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <returns>A reference to the byte at the index.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public ref byte ElementAt(int index)
- {
- unsafe
- {
- CheckIndexInRange(index);
- return ref GetUnsafePtr()[index];
- }
- }
-
- /// <summary>
- /// Sets the length to 0.
- /// </summary>
- public void Clear()
- {
- Length = 0;
- }
-
- /// <summary>
- /// Appends a byte.
- /// </summary>
- /// <remarks>
- /// A zero byte will always follow the newly appended byte.
- ///
- /// No validation is performed: it is your responsibility for the bytes of the string to form valid UTF-8 when you're done appending bytes.
- /// </remarks>
- /// <param name="value">A byte to append.</param>
- public void Add(in byte value)
- {
- this[Length++] = value;
- }
-
- /// <summary>
- /// An enumerator over the characters (not bytes) of a FixedString64Bytes.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// The first <see cref="MoveNext"/> call advances the enumerator's index to the first character.
- /// </remarks>
- public struct Enumerator : IEnumerator
- {
- FixedString64Bytes target;
- int offset;
- Unicode.Rune current;
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes.Enumerator.
- /// </summary>
- /// <param name="other">A FixeString64 for which to create an enumerator.</param>
- public Enumerator(FixedString64Bytes other)
- {
- target = other;
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// Does nothing.
- /// </summary>
- public void Dispose()
- {
- }
-
-
- /// <summary>
- /// Advances the enumerator to the next character.
- /// </summary>
- /// <returns>True if <see cref="Current"/> is valid to read after the call.</returns>
- public bool MoveNext()
- {
- if (offset >= target.Length)
- return false;
-
- unsafe
- {
- Unicode.Utf8ToUcs(out current, target.GetUnsafePtr(), ref offset, target.Length);
- }
-
- return true;
- }
-
- /// <summary>
- /// Resets the enumerator to its initial state.
- /// </summary>
- public void Reset()
- {
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// The current character.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// </remarks>
- /// <value>The current character.</value>
- public Unicode.Rune Current => current;
-
- object IEnumerator.Current => Current;
- }
-
- /// <summary>
- /// Returns an enumerator for iterating over the characters of this string.
- /// </summary>
- /// <returns>An enumerator for iterating over the characters of the FixedString64Bytes.</returns>
- public Enumerator GetEnumerator()
- {
- return new Enumerator(this);
- }
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A `System.String` to compare with.</param>
- /// <returns>An integer denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other string.<br/>
- /// +1 denotes that this string should be sorted to follow the other string.<br/>
- /// </returns>
- [NotBurstCompatible]
- public int CompareTo(String other)
- {
- return ToString().CompareTo(other);
- }
-
- /// <summary>
- /// Returns true if this string and another have the same length and all the same characters.
- /// </summary>
- /// <param name="other">A string to compare for equality.</param>
- /// <returns>True if this string and the other have the same length and all the same characters.</returns>
- [NotBurstCompatible]
- public bool Equals(String other)
- {
- unsafe {
- int alen = utf8LengthInBytes;
- int blen = other.Length;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(bytes);
- fixed(char* bptr = other)
- {
- return UTF8ArrayUnsafeUtility.StrCmp(aptr, alen, bptr, blen) == 0;
- }
- }
- }
-
- /// <summary>
- /// Returns a reference to a FixedList64Bytes<byte> representation of this string.
- /// </summary>
- /// <remarks>
- /// The referenced FixedListByte64 is the very same bytes as the original FixedString64Bytes,
- /// so it is only valid as long as the original FixedString64Bytes is valid.
- /// </remarks>
- /// <returns>A ref to a FixedListByte64 representation of the FixedString64Bytes.</returns>
- public unsafe ref FixedList64Bytes<byte> AsFixedList()
- {
- return ref UnsafeUtility.AsRef<FixedList64Bytes<byte>>(UnsafeUtility.AddressOf(ref this));
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- [NotBurstCompatible]
- public FixedString64Bytes(String source)
- {
- this = default;
- var error = Initialize(source);
- CheckCopyError((CopyError)error, source);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- [NotBurstCompatible]
- internal int Initialize(String source)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe
- {
- fixed (char* sourceptr = source)
- {
- var error = UTF8ArrayUnsafeUtility.Copy(GetUnsafePtr(), out utf8LengthInBytes, utf8MaxLengthInBytes, sourceptr, source.Length);
- if(error != CopyError.None)
- return (int)error;
- this.Length = utf8LengthInBytes;
- }
- }
- return 0;
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- public FixedString64Bytes(Unicode.Rune rune, int count = 1)
- {
- this = default;
- Initialize(rune, count);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(Unicode.Rune rune, int count = 1)
- {
- this = default;
- return (int)this.Append(rune, count);
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString32Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- public FixedString64Bytes(in FixedString32Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString32Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for equality.</param>
- /// <param name="b">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString64Bytes a, in FixedString32Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString32Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString64Bytes a, in FixedString32Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString32Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString64Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- public FixedString64Bytes(in FixedString64Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString64Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for equality.</param>
- /// <param name="b">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString64Bytes a, in FixedString64Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString64Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString64Bytes a, in FixedString64Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString64Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString128Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- public FixedString64Bytes(in FixedString128Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString128Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for equality.</param>
- /// <param name="b">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString64Bytes a, in FixedString128Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString128Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString64Bytes a, in FixedString128Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString128Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString64Bytes to copy.</param>
- /// <returns>A new FixedString128Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public static implicit operator FixedString128Bytes(in FixedString64Bytes fs) => new FixedString128Bytes(in fs);
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString512Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- public FixedString64Bytes(in FixedString512Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString512Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for equality.</param>
- /// <param name="b">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString64Bytes a, in FixedString512Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString512Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString64Bytes a, in FixedString512Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString512Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString64Bytes to copy.</param>
- /// <returns>A new FixedString512Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public static implicit operator FixedString512Bytes(in FixedString64Bytes fs) => new FixedString512Bytes(in fs);
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString4096Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- public FixedString64Bytes(in FixedString4096Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString4096Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for equality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString64Bytes a, in FixedString4096Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString64Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString64Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString64Bytes a, in FixedString4096Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString4096Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString64Bytes to copy.</param>
- /// <returns>A new FixedString4096Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public static implicit operator FixedString4096Bytes(in FixedString64Bytes fs) => new FixedString4096Bytes(in fs);
-
- /// <summary>
- /// Returns a new FixedString64Bytes that is a copy of another string.
- /// </summary>
- /// <param name="b">A string to copy.</param>
- /// <returns>A new FixedString64Bytes that is a copy of another string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString64Bytes.</exception>
- [NotBurstCompatible]
- public static implicit operator FixedString64Bytes(string b) => new FixedString64Bytes(b);
-
- /// <summary>
- /// Returns a new managed string that is a copy of this string.
- /// </summary>
- /// <returns>A new managed string that is a copy of this string.</returns>
- [NotBurstCompatible]
- public override String ToString()
- {
- return this.ConvertToString();
- }
-
- /// <summary>
- /// Returns a hash code of this string.
- /// </summary>
- /// <remarks>Only the character bytes are included in the hash: any bytes beyond <see cref="Length"/> are not part of the hash.</remarks>
- /// <returns>The hash code of this string.</returns>
- public override int GetHashCode()
- {
- return this.ComputeHashCode();
- }
-
- /// <summary>
- /// Returns true if this string and an object are equal.
- /// </summary>
- /// <remarks>
- /// Returns false if the object is neither a System.String or a FixedString.
- ///
- /// Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="obj">An object to compare for equality.</param>
- /// <returns>True if this string and the object are equal.</returns>
- [NotBurstCompatible]
- public override bool Equals(object obj)
- {
- if(ReferenceEquals(null, obj)) return false;
- if(obj is String aString) return Equals(aString);
- if(obj is FixedString32Bytes aFixedString32Bytes) return Equals(aFixedString32Bytes);
- if(obj is FixedString64Bytes aFixedString64Bytes) return Equals(aFixedString64Bytes);
- if(obj is FixedString128Bytes aFixedString128Bytes) return Equals(aFixedString128Bytes);
- if(obj is FixedString512Bytes aFixedString512Bytes) return Equals(aFixedString512Bytes);
- if(obj is FixedString4096Bytes aFixedString4096Bytes) return Equals(aFixedString4096Bytes);
- return false;
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckIndexInRange(int index)
- {
- if (index < 0)
- throw new IndexOutOfRangeException($"Index {index} must be positive.");
- if (index >= utf8LengthInBytes)
- throw new IndexOutOfRangeException($"Index {index} is out of range in FixedString64Bytes of '{utf8LengthInBytes}' Length.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckLengthInRange(int length)
- {
- if (length < 0)
- throw new ArgumentOutOfRangeException($"Length {length} must be positive.");
- if (length > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Length {length} is out of range in FixedString64Bytes of '{utf8MaxLengthInBytes}' Capacity.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckCapacityInRange(int capacity)
- {
- if (capacity > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Capacity {capacity} must be lower than {utf8MaxLengthInBytes}.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckCopyError(CopyError error, String source)
- {
- if (error != CopyError.None)
- throw new ArgumentException($"FixedString64Bytes: {error} while copying \"{source}\"");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckFormatError(FormatError error)
- {
- if (error != FormatError.None)
- throw new ArgumentException("Source is too long to fit into fixed string of this size");
- }
- }
-
- // A temporary copy of a struct is made before it is displayed in a C# debugger.
- // However, only the first element of data members with names is copied at this time.
- // Therefore, it's important that all data visible in the debugger, has a name
- // and includes no 'fixed' array. This is why we name every byte in the following struct.
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [Serializable]
- [StructLayout(LayoutKind.Explicit, Size=126)]
- [BurstCompatible]
- public struct FixedBytes126
- {
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(0)] public FixedBytes16 offset0000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(16)] public FixedBytes16 offset0016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(32)] public FixedBytes16 offset0032;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(48)] public FixedBytes16 offset0048;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(64)] public FixedBytes16 offset0064;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(80)] public FixedBytes16 offset0080;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(96)] public FixedBytes16 offset0096;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(112)] public byte byte0112;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(113)] public byte byte0113;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(114)] public byte byte0114;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(115)] public byte byte0115;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(116)] public byte byte0116;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(117)] public byte byte0117;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(118)] public byte byte0118;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(119)] public byte byte0119;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(120)] public byte byte0120;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(121)] public byte byte0121;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(122)] public byte byte0122;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(123)] public byte byte0123;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(124)] public byte byte0124;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(125)] public byte byte0125;
-
- }
- [Obsolete("Renamed to FixedString128Bytes (UnityUpgradable) -> FixedString128Bytes", true)]
- public partial struct FixedString128 {}
-
- /// <summary>
- /// An unmanaged UTF-8 string whose content is stored directly in the 128-byte struct.
- /// </summary>
- /// <remarks>
- /// The binary layout of this string is guaranteed, for now and all time, to be a length (a little-endian two byte integer)
- /// followed by the bytes of the characters (with no padding). A zero byte always immediately follows the last character.
- /// Effectively, the number of bytes for storing characters is 3 less than 128 (two length bytes and one null byte).
- ///
- /// This layout is identical to a <see cref="FixedList128Bytes{T}"/> of bytes, thus allowing reinterpretation between FixedString128Bytes and FixedList128Bytes.
- ///
- /// By virtue of being an unmanaged, non-allocated struct with no pointers, this string is fully compatible with jobs and Burst compilation.
- /// Unlike managed string types, these strings can be put in any unmanaged ECS components, FixedList, or any other unmanaged structs.
- /// </remarks>
- [Serializable]
- [StructLayout(LayoutKind.Sequential, Size=128)]
- [BurstCompatible]
- public partial struct FixedString128Bytes
- : INativeList<byte>
- , IUTF8Bytes
- , IComparable<String>
- , IEquatable<String>
- , IComparable<FixedString32Bytes>
- , IEquatable<FixedString32Bytes>
- , IComparable<FixedString64Bytes>
- , IEquatable<FixedString64Bytes>
- , IComparable<FixedString128Bytes>
- , IEquatable<FixedString128Bytes>
- , IComparable<FixedString512Bytes>
- , IEquatable<FixedString512Bytes>
- , IComparable<FixedString4096Bytes>
- , IEquatable<FixedString4096Bytes>
- {
- internal const ushort utf8MaxLengthInBytes = 125;
-
- [SerializeField] internal ushort utf8LengthInBytes;
- [SerializeField] internal FixedBytes126 bytes;
-
- /// <summary>
- /// Returns the maximum number of UTF-8 bytes that can be stored in this string.
- /// </summary>
- /// <returns>
- /// The maximum number of UTF-8 bytes that can be stored in this string.
- /// </returns>
- public static int UTF8MaxLengthInBytes => utf8MaxLengthInBytes;
-
- /// <summary>
- /// For internal use only. Use <see cref="ToString"/> instead.
- /// </summary>
- /// <value>For internal use only. Use <see cref="ToString"/> instead.</value>
- [CreateProperty]
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
- [NotBurstCompatible]
- public string Value => ToString();
-
- /// <summary>
- /// Returns a pointer to the character bytes.
- /// </summary>
- /// <returns>A pointer to the character bytes.</returns>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe byte* GetUnsafePtr()
- {
- return (byte*) UnsafeUtility.AddressOf(ref bytes);
- }
-
- /// <summary>
- /// The current length in bytes of this string's content.
- /// </summary>
- /// <remarks>
- /// The length value does not include the null-terminator byte.
- /// </remarks>
- /// <param name="value">The new length in bytes of the string's content.</param>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if the new length is out of bounds.</exception>
- /// <value>
- /// The current length in bytes of this string's content.
- /// </value>
- public int Length
- {
- get
- {
- return utf8LengthInBytes;
- }
- set
- {
- CheckLengthInRange(value);
- utf8LengthInBytes = (ushort)value;
- unsafe
- {
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- }
- }
-
- /// <summary>
- /// The number of bytes this string has for storing UTF-8 characters.
- /// </summary>
- /// <value>The number of bytes this string has for storing UTF-8 characters.</value>
- /// <remarks>
- /// Does not include the null-terminator byte.
- ///
- /// A setter is included for conformity with <see cref="INativeList{T}"/>, but <see cref="Capacity"/> is fixed at 125.
- /// Setting the value to anything other than 125 throws an exception.
- ///
- /// In UTF-8 encoding, each Unicode code point (character) requires 1 to 4 bytes,
- /// so the number of characters that can be stored may be less than the capacity.
- /// </remarks>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to set the capacity to anything other than 125.</exception>
- public int Capacity
- {
- get
- {
- return utf8MaxLengthInBytes;
- }
- set
- {
- CheckCapacityInRange(value);
- }
- }
-
- /// <summary>
- /// Attempts to set the length in bytes. Does nothing if the new length is invalid.
- /// </summary>
- /// <param name="newLength">The desired length.</param>
- /// <param name="clearOptions">Whether added or removed bytes should be cleared (zeroed). (Increasing the length adds bytes; decreasing the length removes bytes.)</param>
- /// <returns>True if the new length is valid.</returns>
- public bool TryResize(int newLength, NativeArrayOptions clearOptions = NativeArrayOptions.ClearMemory)
- {
- if (newLength < 0 || newLength > utf8MaxLengthInBytes)
- return false;
- if (newLength == utf8LengthInBytes)
- return true;
- unsafe
- {
- if (clearOptions == NativeArrayOptions.ClearMemory)
- {
- if (newLength > utf8LengthInBytes)
- UnsafeUtility.MemClear(GetUnsafePtr() + utf8LengthInBytes, newLength - utf8LengthInBytes);
- else
- UnsafeUtility.MemClear(GetUnsafePtr() + newLength, utf8LengthInBytes - newLength);
- }
- utf8LengthInBytes = (ushort)newLength;
- // always null terminate
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- return true;
- }
-
- /// <summary>
- /// Returns true if this string is empty (has no characters).
- /// </summary>
- /// <value>True if this string is empty (has no characters).</value>
- public bool IsEmpty => utf8LengthInBytes == 0;
-
- /// <summary>
- /// Returns the byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <value>The byte at the index.</value>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public byte this[int index]
- {
- get
- {
- unsafe
- {
- CheckIndexInRange(index);
- return GetUnsafePtr()[index];
- }
- }
-
- set
- {
- unsafe
- {
- CheckIndexInRange(index);
- GetUnsafePtr()[index] = value;
- }
- }
- }
-
-
- /// <summary>
- /// Returns the reference to a byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <returns>A reference to the byte at the index.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public ref byte ElementAt(int index)
- {
- unsafe
- {
- CheckIndexInRange(index);
- return ref GetUnsafePtr()[index];
- }
- }
-
- /// <summary>
- /// Sets the length to 0.
- /// </summary>
- public void Clear()
- {
- Length = 0;
- }
-
- /// <summary>
- /// Appends a byte.
- /// </summary>
- /// <remarks>
- /// A zero byte will always follow the newly appended byte.
- ///
- /// No validation is performed: it is your responsibility for the bytes of the string to form valid UTF-8 when you're done appending bytes.
- /// </remarks>
- /// <param name="value">A byte to append.</param>
- public void Add(in byte value)
- {
- this[Length++] = value;
- }
-
- /// <summary>
- /// An enumerator over the characters (not bytes) of a FixedString128Bytes.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// The first <see cref="MoveNext"/> call advances the enumerator's index to the first character.
- /// </remarks>
- public struct Enumerator : IEnumerator
- {
- FixedString128Bytes target;
- int offset;
- Unicode.Rune current;
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes.Enumerator.
- /// </summary>
- /// <param name="other">A FixeString128 for which to create an enumerator.</param>
- public Enumerator(FixedString128Bytes other)
- {
- target = other;
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// Does nothing.
- /// </summary>
- public void Dispose()
- {
- }
-
-
- /// <summary>
- /// Advances the enumerator to the next character.
- /// </summary>
- /// <returns>True if <see cref="Current"/> is valid to read after the call.</returns>
- public bool MoveNext()
- {
- if (offset >= target.Length)
- return false;
-
- unsafe
- {
- Unicode.Utf8ToUcs(out current, target.GetUnsafePtr(), ref offset, target.Length);
- }
-
- return true;
- }
-
- /// <summary>
- /// Resets the enumerator to its initial state.
- /// </summary>
- public void Reset()
- {
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// The current character.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// </remarks>
- /// <value>The current character.</value>
- public Unicode.Rune Current => current;
-
- object IEnumerator.Current => Current;
- }
-
- /// <summary>
- /// Returns an enumerator for iterating over the characters of this string.
- /// </summary>
- /// <returns>An enumerator for iterating over the characters of the FixedString128Bytes.</returns>
- public Enumerator GetEnumerator()
- {
- return new Enumerator(this);
- }
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A `System.String` to compare with.</param>
- /// <returns>An integer denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other string.<br/>
- /// +1 denotes that this string should be sorted to follow the other string.<br/>
- /// </returns>
- [NotBurstCompatible]
- public int CompareTo(String other)
- {
- return ToString().CompareTo(other);
- }
-
- /// <summary>
- /// Returns true if this string and another have the same length and all the same characters.
- /// </summary>
- /// <param name="other">A string to compare for equality.</param>
- /// <returns>True if this string and the other have the same length and all the same characters.</returns>
- [NotBurstCompatible]
- public bool Equals(String other)
- {
- unsafe {
- int alen = utf8LengthInBytes;
- int blen = other.Length;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(bytes);
- fixed(char* bptr = other)
- {
- return UTF8ArrayUnsafeUtility.StrCmp(aptr, alen, bptr, blen) == 0;
- }
- }
- }
-
- /// <summary>
- /// Returns a reference to a FixedList128Bytes<byte> representation of this string.
- /// </summary>
- /// <remarks>
- /// The referenced FixedListByte128 is the very same bytes as the original FixedString128Bytes,
- /// so it is only valid as long as the original FixedString128Bytes is valid.
- /// </remarks>
- /// <returns>A ref to a FixedListByte128 representation of the FixedString128Bytes.</returns>
- public unsafe ref FixedList128Bytes<byte> AsFixedList()
- {
- return ref UnsafeUtility.AsRef<FixedList128Bytes<byte>>(UnsafeUtility.AddressOf(ref this));
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- [NotBurstCompatible]
- public FixedString128Bytes(String source)
- {
- this = default;
- var error = Initialize(source);
- CheckCopyError((CopyError)error, source);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- [NotBurstCompatible]
- internal int Initialize(String source)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe
- {
- fixed (char* sourceptr = source)
- {
- var error = UTF8ArrayUnsafeUtility.Copy(GetUnsafePtr(), out utf8LengthInBytes, utf8MaxLengthInBytes, sourceptr, source.Length);
- if(error != CopyError.None)
- return (int)error;
- this.Length = utf8LengthInBytes;
- }
- }
- return 0;
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- public FixedString128Bytes(Unicode.Rune rune, int count = 1)
- {
- this = default;
- Initialize(rune, count);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(Unicode.Rune rune, int count = 1)
- {
- this = default;
- return (int)this.Append(rune, count);
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString32Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public FixedString128Bytes(in FixedString32Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString32Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for equality.</param>
- /// <param name="b">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString128Bytes a, in FixedString32Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString32Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString128Bytes a, in FixedString32Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString32Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString64Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public FixedString128Bytes(in FixedString64Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString64Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for equality.</param>
- /// <param name="b">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString128Bytes a, in FixedString64Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString64Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString128Bytes a, in FixedString64Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString64Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString128Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public FixedString128Bytes(in FixedString128Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString128Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for equality.</param>
- /// <param name="b">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString128Bytes a, in FixedString128Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString128Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString128Bytes a, in FixedString128Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString128Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString512Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public FixedString128Bytes(in FixedString512Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString512Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for equality.</param>
- /// <param name="b">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString128Bytes a, in FixedString512Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString512Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString128Bytes a, in FixedString512Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString512Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString128Bytes to copy.</param>
- /// <returns>A new FixedString512Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public static implicit operator FixedString512Bytes(in FixedString128Bytes fs) => new FixedString512Bytes(in fs);
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString4096Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- public FixedString128Bytes(in FixedString4096Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString4096Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for equality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString128Bytes a, in FixedString4096Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString128Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString128Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString128Bytes a, in FixedString4096Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString4096Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString128Bytes to copy.</param>
- /// <returns>A new FixedString4096Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public static implicit operator FixedString4096Bytes(in FixedString128Bytes fs) => new FixedString4096Bytes(in fs);
-
- /// <summary>
- /// Returns a new FixedString128Bytes that is a copy of another string.
- /// </summary>
- /// <param name="b">A string to copy.</param>
- /// <returns>A new FixedString128Bytes that is a copy of another string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString128Bytes.</exception>
- [NotBurstCompatible]
- public static implicit operator FixedString128Bytes(string b) => new FixedString128Bytes(b);
-
- /// <summary>
- /// Returns a new managed string that is a copy of this string.
- /// </summary>
- /// <returns>A new managed string that is a copy of this string.</returns>
- [NotBurstCompatible]
- public override String ToString()
- {
- return this.ConvertToString();
- }
-
- /// <summary>
- /// Returns a hash code of this string.
- /// </summary>
- /// <remarks>Only the character bytes are included in the hash: any bytes beyond <see cref="Length"/> are not part of the hash.</remarks>
- /// <returns>The hash code of this string.</returns>
- public override int GetHashCode()
- {
- return this.ComputeHashCode();
- }
-
- /// <summary>
- /// Returns true if this string and an object are equal.
- /// </summary>
- /// <remarks>
- /// Returns false if the object is neither a System.String or a FixedString.
- ///
- /// Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="obj">An object to compare for equality.</param>
- /// <returns>True if this string and the object are equal.</returns>
- [NotBurstCompatible]
- public override bool Equals(object obj)
- {
- if(ReferenceEquals(null, obj)) return false;
- if(obj is String aString) return Equals(aString);
- if(obj is FixedString32Bytes aFixedString32Bytes) return Equals(aFixedString32Bytes);
- if(obj is FixedString64Bytes aFixedString64Bytes) return Equals(aFixedString64Bytes);
- if(obj is FixedString128Bytes aFixedString128Bytes) return Equals(aFixedString128Bytes);
- if(obj is FixedString512Bytes aFixedString512Bytes) return Equals(aFixedString512Bytes);
- if(obj is FixedString4096Bytes aFixedString4096Bytes) return Equals(aFixedString4096Bytes);
- return false;
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckIndexInRange(int index)
- {
- if (index < 0)
- throw new IndexOutOfRangeException($"Index {index} must be positive.");
- if (index >= utf8LengthInBytes)
- throw new IndexOutOfRangeException($"Index {index} is out of range in FixedString128Bytes of '{utf8LengthInBytes}' Length.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckLengthInRange(int length)
- {
- if (length < 0)
- throw new ArgumentOutOfRangeException($"Length {length} must be positive.");
- if (length > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Length {length} is out of range in FixedString128Bytes of '{utf8MaxLengthInBytes}' Capacity.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckCapacityInRange(int capacity)
- {
- if (capacity > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Capacity {capacity} must be lower than {utf8MaxLengthInBytes}.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckCopyError(CopyError error, String source)
- {
- if (error != CopyError.None)
- throw new ArgumentException($"FixedString128Bytes: {error} while copying \"{source}\"");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckFormatError(FormatError error)
- {
- if (error != FormatError.None)
- throw new ArgumentException("Source is too long to fit into fixed string of this size");
- }
- }
-
- // A temporary copy of a struct is made before it is displayed in a C# debugger.
- // However, only the first element of data members with names is copied at this time.
- // Therefore, it's important that all data visible in the debugger, has a name
- // and includes no 'fixed' array. This is why we name every byte in the following struct.
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [Serializable]
- [StructLayout(LayoutKind.Explicit, Size=510)]
- [BurstCompatible]
- public struct FixedBytes510
- {
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(0)] public FixedBytes16 offset0000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(16)] public FixedBytes16 offset0016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(32)] public FixedBytes16 offset0032;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(48)] public FixedBytes16 offset0048;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(64)] public FixedBytes16 offset0064;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(80)] public FixedBytes16 offset0080;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(96)] public FixedBytes16 offset0096;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(112)] public FixedBytes16 offset0112;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(128)] public FixedBytes16 offset0128;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(144)] public FixedBytes16 offset0144;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(160)] public FixedBytes16 offset0160;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(176)] public FixedBytes16 offset0176;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(192)] public FixedBytes16 offset0192;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(208)] public FixedBytes16 offset0208;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(224)] public FixedBytes16 offset0224;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(240)] public FixedBytes16 offset0240;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(256)] public FixedBytes16 offset0256;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(272)] public FixedBytes16 offset0272;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(288)] public FixedBytes16 offset0288;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(304)] public FixedBytes16 offset0304;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(320)] public FixedBytes16 offset0320;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(336)] public FixedBytes16 offset0336;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(352)] public FixedBytes16 offset0352;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(368)] public FixedBytes16 offset0368;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(384)] public FixedBytes16 offset0384;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(400)] public FixedBytes16 offset0400;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(416)] public FixedBytes16 offset0416;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(432)] public FixedBytes16 offset0432;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(448)] public FixedBytes16 offset0448;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(464)] public FixedBytes16 offset0464;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(480)] public FixedBytes16 offset0480;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(496)] public byte byte0496;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(497)] public byte byte0497;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(498)] public byte byte0498;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(499)] public byte byte0499;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(500)] public byte byte0500;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(501)] public byte byte0501;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(502)] public byte byte0502;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(503)] public byte byte0503;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(504)] public byte byte0504;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(505)] public byte byte0505;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(506)] public byte byte0506;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(507)] public byte byte0507;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(508)] public byte byte0508;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(509)] public byte byte0509;
-
- }
- [Obsolete("Renamed to FixedString512Bytes (UnityUpgradable) -> FixedString512Bytes", true)]
- public partial struct FixedString512 {}
-
- /// <summary>
- /// An unmanaged UTF-8 string whose content is stored directly in the 512-byte struct.
- /// </summary>
- /// <remarks>
- /// The binary layout of this string is guaranteed, for now and all time, to be a length (a little-endian two byte integer)
- /// followed by the bytes of the characters (with no padding). A zero byte always immediately follows the last character.
- /// Effectively, the number of bytes for storing characters is 3 less than 512 (two length bytes and one null byte).
- ///
- /// This layout is identical to a <see cref="FixedList512Bytes{T}"/> of bytes, thus allowing reinterpretation between FixedString512Bytes and FixedList512Bytes.
- ///
- /// By virtue of being an unmanaged, non-allocated struct with no pointers, this string is fully compatible with jobs and Burst compilation.
- /// Unlike managed string types, these strings can be put in any unmanaged ECS components, FixedList, or any other unmanaged structs.
- /// </remarks>
- [Serializable]
- [StructLayout(LayoutKind.Sequential, Size=512)]
- [BurstCompatible]
- public partial struct FixedString512Bytes
- : INativeList<byte>
- , IUTF8Bytes
- , IComparable<String>
- , IEquatable<String>
- , IComparable<FixedString32Bytes>
- , IEquatable<FixedString32Bytes>
- , IComparable<FixedString64Bytes>
- , IEquatable<FixedString64Bytes>
- , IComparable<FixedString128Bytes>
- , IEquatable<FixedString128Bytes>
- , IComparable<FixedString512Bytes>
- , IEquatable<FixedString512Bytes>
- , IComparable<FixedString4096Bytes>
- , IEquatable<FixedString4096Bytes>
- {
- internal const ushort utf8MaxLengthInBytes = 509;
-
- [SerializeField] internal ushort utf8LengthInBytes;
- [SerializeField] internal FixedBytes510 bytes;
-
- /// <summary>
- /// Returns the maximum number of UTF-8 bytes that can be stored in this string.
- /// </summary>
- /// <returns>
- /// The maximum number of UTF-8 bytes that can be stored in this string.
- /// </returns>
- public static int UTF8MaxLengthInBytes => utf8MaxLengthInBytes;
-
- /// <summary>
- /// For internal use only. Use <see cref="ToString"/> instead.
- /// </summary>
- /// <value>For internal use only. Use <see cref="ToString"/> instead.</value>
- [CreateProperty]
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
- [NotBurstCompatible]
- public string Value => ToString();
-
- /// <summary>
- /// Returns a pointer to the character bytes.
- /// </summary>
- /// <returns>A pointer to the character bytes.</returns>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe byte* GetUnsafePtr()
- {
- return (byte*) UnsafeUtility.AddressOf(ref bytes);
- }
-
- /// <summary>
- /// The current length in bytes of this string's content.
- /// </summary>
- /// <remarks>
- /// The length value does not include the null-terminator byte.
- /// </remarks>
- /// <param name="value">The new length in bytes of the string's content.</param>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if the new length is out of bounds.</exception>
- /// <value>
- /// The current length in bytes of this string's content.
- /// </value>
- public int Length
- {
- get
- {
- return utf8LengthInBytes;
- }
- set
- {
- CheckLengthInRange(value);
- utf8LengthInBytes = (ushort)value;
- unsafe
- {
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- }
- }
-
- /// <summary>
- /// The number of bytes this string has for storing UTF-8 characters.
- /// </summary>
- /// <value>The number of bytes this string has for storing UTF-8 characters.</value>
- /// <remarks>
- /// Does not include the null-terminator byte.
- ///
- /// A setter is included for conformity with <see cref="INativeList{T}"/>, but <see cref="Capacity"/> is fixed at 509.
- /// Setting the value to anything other than 509 throws an exception.
- ///
- /// In UTF-8 encoding, each Unicode code point (character) requires 1 to 4 bytes,
- /// so the number of characters that can be stored may be less than the capacity.
- /// </remarks>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to set the capacity to anything other than 509.</exception>
- public int Capacity
- {
- get
- {
- return utf8MaxLengthInBytes;
- }
- set
- {
- CheckCapacityInRange(value);
- }
- }
-
- /// <summary>
- /// Attempts to set the length in bytes. Does nothing if the new length is invalid.
- /// </summary>
- /// <param name="newLength">The desired length.</param>
- /// <param name="clearOptions">Whether added or removed bytes should be cleared (zeroed). (Increasing the length adds bytes; decreasing the length removes bytes.)</param>
- /// <returns>True if the new length is valid.</returns>
- public bool TryResize(int newLength, NativeArrayOptions clearOptions = NativeArrayOptions.ClearMemory)
- {
- if (newLength < 0 || newLength > utf8MaxLengthInBytes)
- return false;
- if (newLength == utf8LengthInBytes)
- return true;
- unsafe
- {
- if (clearOptions == NativeArrayOptions.ClearMemory)
- {
- if (newLength > utf8LengthInBytes)
- UnsafeUtility.MemClear(GetUnsafePtr() + utf8LengthInBytes, newLength - utf8LengthInBytes);
- else
- UnsafeUtility.MemClear(GetUnsafePtr() + newLength, utf8LengthInBytes - newLength);
- }
- utf8LengthInBytes = (ushort)newLength;
- // always null terminate
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- return true;
- }
-
- /// <summary>
- /// Returns true if this string is empty (has no characters).
- /// </summary>
- /// <value>True if this string is empty (has no characters).</value>
- public bool IsEmpty => utf8LengthInBytes == 0;
-
- /// <summary>
- /// Returns the byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <value>The byte at the index.</value>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public byte this[int index]
- {
- get
- {
- unsafe
- {
- CheckIndexInRange(index);
- return GetUnsafePtr()[index];
- }
- }
-
- set
- {
- unsafe
- {
- CheckIndexInRange(index);
- GetUnsafePtr()[index] = value;
- }
- }
- }
-
-
- /// <summary>
- /// Returns the reference to a byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <returns>A reference to the byte at the index.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public ref byte ElementAt(int index)
- {
- unsafe
- {
- CheckIndexInRange(index);
- return ref GetUnsafePtr()[index];
- }
- }
-
- /// <summary>
- /// Sets the length to 0.
- /// </summary>
- public void Clear()
- {
- Length = 0;
- }
-
- /// <summary>
- /// Appends a byte.
- /// </summary>
- /// <remarks>
- /// A zero byte will always follow the newly appended byte.
- ///
- /// No validation is performed: it is your responsibility for the bytes of the string to form valid UTF-8 when you're done appending bytes.
- /// </remarks>
- /// <param name="value">A byte to append.</param>
- public void Add(in byte value)
- {
- this[Length++] = value;
- }
-
- /// <summary>
- /// An enumerator over the characters (not bytes) of a FixedString512Bytes.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// The first <see cref="MoveNext"/> call advances the enumerator's index to the first character.
- /// </remarks>
- public struct Enumerator : IEnumerator
- {
- FixedString512Bytes target;
- int offset;
- Unicode.Rune current;
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes.Enumerator.
- /// </summary>
- /// <param name="other">A FixeString512 for which to create an enumerator.</param>
- public Enumerator(FixedString512Bytes other)
- {
- target = other;
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// Does nothing.
- /// </summary>
- public void Dispose()
- {
- }
-
-
- /// <summary>
- /// Advances the enumerator to the next character.
- /// </summary>
- /// <returns>True if <see cref="Current"/> is valid to read after the call.</returns>
- public bool MoveNext()
- {
- if (offset >= target.Length)
- return false;
-
- unsafe
- {
- Unicode.Utf8ToUcs(out current, target.GetUnsafePtr(), ref offset, target.Length);
- }
-
- return true;
- }
-
- /// <summary>
- /// Resets the enumerator to its initial state.
- /// </summary>
- public void Reset()
- {
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// The current character.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// </remarks>
- /// <value>The current character.</value>
- public Unicode.Rune Current => current;
-
- object IEnumerator.Current => Current;
- }
-
- /// <summary>
- /// Returns an enumerator for iterating over the characters of this string.
- /// </summary>
- /// <returns>An enumerator for iterating over the characters of the FixedString512Bytes.</returns>
- public Enumerator GetEnumerator()
- {
- return new Enumerator(this);
- }
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A `System.String` to compare with.</param>
- /// <returns>An integer denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other string.<br/>
- /// +1 denotes that this string should be sorted to follow the other string.<br/>
- /// </returns>
- [NotBurstCompatible]
- public int CompareTo(String other)
- {
- return ToString().CompareTo(other);
- }
-
- /// <summary>
- /// Returns true if this string and another have the same length and all the same characters.
- /// </summary>
- /// <param name="other">A string to compare for equality.</param>
- /// <returns>True if this string and the other have the same length and all the same characters.</returns>
- [NotBurstCompatible]
- public bool Equals(String other)
- {
- unsafe {
- int alen = utf8LengthInBytes;
- int blen = other.Length;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(bytes);
- fixed(char* bptr = other)
- {
- return UTF8ArrayUnsafeUtility.StrCmp(aptr, alen, bptr, blen) == 0;
- }
- }
- }
-
- /// <summary>
- /// Returns a reference to a FixedList512Bytes<byte> representation of this string.
- /// </summary>
- /// <remarks>
- /// The referenced FixedListByte512 is the very same bytes as the original FixedString512Bytes,
- /// so it is only valid as long as the original FixedString512Bytes is valid.
- /// </remarks>
- /// <returns>A ref to a FixedListByte512 representation of the FixedString512Bytes.</returns>
- public unsafe ref FixedList512Bytes<byte> AsFixedList()
- {
- return ref UnsafeUtility.AsRef<FixedList512Bytes<byte>>(UnsafeUtility.AddressOf(ref this));
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- [NotBurstCompatible]
- public FixedString512Bytes(String source)
- {
- this = default;
- var error = Initialize(source);
- CheckCopyError((CopyError)error, source);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- [NotBurstCompatible]
- internal int Initialize(String source)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe
- {
- fixed (char* sourceptr = source)
- {
- var error = UTF8ArrayUnsafeUtility.Copy(GetUnsafePtr(), out utf8LengthInBytes, utf8MaxLengthInBytes, sourceptr, source.Length);
- if(error != CopyError.None)
- return (int)error;
- this.Length = utf8LengthInBytes;
- }
- }
- return 0;
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- public FixedString512Bytes(Unicode.Rune rune, int count = 1)
- {
- this = default;
- Initialize(rune, count);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(Unicode.Rune rune, int count = 1)
- {
- this = default;
- return (int)this.Append(rune, count);
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString32Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public FixedString512Bytes(in FixedString32Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString32Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for equality.</param>
- /// <param name="b">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString512Bytes a, in FixedString32Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString32Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString512Bytes a, in FixedString32Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString32Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString64Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public FixedString512Bytes(in FixedString64Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString64Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for equality.</param>
- /// <param name="b">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString512Bytes a, in FixedString64Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString64Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString512Bytes a, in FixedString64Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString64Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString128Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public FixedString512Bytes(in FixedString128Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString128Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for equality.</param>
- /// <param name="b">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString512Bytes a, in FixedString128Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString128Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString512Bytes a, in FixedString128Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString128Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString512Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public FixedString512Bytes(in FixedString512Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString512Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for equality.</param>
- /// <param name="b">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString512Bytes a, in FixedString512Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString512Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString512Bytes a, in FixedString512Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString512Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString4096Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- public FixedString512Bytes(in FixedString4096Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString4096Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for equality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString512Bytes a, in FixedString4096Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString512Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString512Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString512Bytes a, in FixedString4096Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString4096Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="fs">A FixedString512Bytes to copy.</param>
- /// <returns>A new FixedString4096Bytes that is a copy of the other string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public static implicit operator FixedString4096Bytes(in FixedString512Bytes fs) => new FixedString4096Bytes(in fs);
-
- /// <summary>
- /// Returns a new FixedString512Bytes that is a copy of another string.
- /// </summary>
- /// <param name="b">A string to copy.</param>
- /// <returns>A new FixedString512Bytes that is a copy of another string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString512Bytes.</exception>
- [NotBurstCompatible]
- public static implicit operator FixedString512Bytes(string b) => new FixedString512Bytes(b);
-
- /// <summary>
- /// Returns a new managed string that is a copy of this string.
- /// </summary>
- /// <returns>A new managed string that is a copy of this string.</returns>
- [NotBurstCompatible]
- public override String ToString()
- {
- return this.ConvertToString();
- }
-
- /// <summary>
- /// Returns a hash code of this string.
- /// </summary>
- /// <remarks>Only the character bytes are included in the hash: any bytes beyond <see cref="Length"/> are not part of the hash.</remarks>
- /// <returns>The hash code of this string.</returns>
- public override int GetHashCode()
- {
- return this.ComputeHashCode();
- }
-
- /// <summary>
- /// Returns true if this string and an object are equal.
- /// </summary>
- /// <remarks>
- /// Returns false if the object is neither a System.String or a FixedString.
- ///
- /// Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="obj">An object to compare for equality.</param>
- /// <returns>True if this string and the object are equal.</returns>
- [NotBurstCompatible]
- public override bool Equals(object obj)
- {
- if(ReferenceEquals(null, obj)) return false;
- if(obj is String aString) return Equals(aString);
- if(obj is FixedString32Bytes aFixedString32Bytes) return Equals(aFixedString32Bytes);
- if(obj is FixedString64Bytes aFixedString64Bytes) return Equals(aFixedString64Bytes);
- if(obj is FixedString128Bytes aFixedString128Bytes) return Equals(aFixedString128Bytes);
- if(obj is FixedString512Bytes aFixedString512Bytes) return Equals(aFixedString512Bytes);
- if(obj is FixedString4096Bytes aFixedString4096Bytes) return Equals(aFixedString4096Bytes);
- return false;
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckIndexInRange(int index)
- {
- if (index < 0)
- throw new IndexOutOfRangeException($"Index {index} must be positive.");
- if (index >= utf8LengthInBytes)
- throw new IndexOutOfRangeException($"Index {index} is out of range in FixedString512Bytes of '{utf8LengthInBytes}' Length.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckLengthInRange(int length)
- {
- if (length < 0)
- throw new ArgumentOutOfRangeException($"Length {length} must be positive.");
- if (length > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Length {length} is out of range in FixedString512Bytes of '{utf8MaxLengthInBytes}' Capacity.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckCapacityInRange(int capacity)
- {
- if (capacity > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Capacity {capacity} must be lower than {utf8MaxLengthInBytes}.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckCopyError(CopyError error, String source)
- {
- if (error != CopyError.None)
- throw new ArgumentException($"FixedString512Bytes: {error} while copying \"{source}\"");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckFormatError(FormatError error)
- {
- if (error != FormatError.None)
- throw new ArgumentException("Source is too long to fit into fixed string of this size");
- }
- }
-
- // A temporary copy of a struct is made before it is displayed in a C# debugger.
- // However, only the first element of data members with names is copied at this time.
- // Therefore, it's important that all data visible in the debugger, has a name
- // and includes no 'fixed' array. This is why we name every byte in the following struct.
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [Serializable]
- [StructLayout(LayoutKind.Explicit, Size=4094)]
- [BurstCompatible]
- public struct FixedBytes4094
- {
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(0)] public FixedBytes16 offset0000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(16)] public FixedBytes16 offset0016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(32)] public FixedBytes16 offset0032;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(48)] public FixedBytes16 offset0048;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(64)] public FixedBytes16 offset0064;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(80)] public FixedBytes16 offset0080;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(96)] public FixedBytes16 offset0096;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(112)] public FixedBytes16 offset0112;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(128)] public FixedBytes16 offset0128;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(144)] public FixedBytes16 offset0144;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(160)] public FixedBytes16 offset0160;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(176)] public FixedBytes16 offset0176;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(192)] public FixedBytes16 offset0192;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(208)] public FixedBytes16 offset0208;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(224)] public FixedBytes16 offset0224;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(240)] public FixedBytes16 offset0240;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(256)] public FixedBytes16 offset0256;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(272)] public FixedBytes16 offset0272;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(288)] public FixedBytes16 offset0288;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(304)] public FixedBytes16 offset0304;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(320)] public FixedBytes16 offset0320;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(336)] public FixedBytes16 offset0336;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(352)] public FixedBytes16 offset0352;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(368)] public FixedBytes16 offset0368;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(384)] public FixedBytes16 offset0384;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(400)] public FixedBytes16 offset0400;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(416)] public FixedBytes16 offset0416;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(432)] public FixedBytes16 offset0432;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(448)] public FixedBytes16 offset0448;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(464)] public FixedBytes16 offset0464;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(480)] public FixedBytes16 offset0480;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(496)] public FixedBytes16 offset0496;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(512)] public FixedBytes16 offset0512;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(528)] public FixedBytes16 offset0528;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(544)] public FixedBytes16 offset0544;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(560)] public FixedBytes16 offset0560;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(576)] public FixedBytes16 offset0576;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(592)] public FixedBytes16 offset0592;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(608)] public FixedBytes16 offset0608;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(624)] public FixedBytes16 offset0624;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(640)] public FixedBytes16 offset0640;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(656)] public FixedBytes16 offset0656;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(672)] public FixedBytes16 offset0672;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(688)] public FixedBytes16 offset0688;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(704)] public FixedBytes16 offset0704;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(720)] public FixedBytes16 offset0720;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(736)] public FixedBytes16 offset0736;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(752)] public FixedBytes16 offset0752;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(768)] public FixedBytes16 offset0768;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(784)] public FixedBytes16 offset0784;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(800)] public FixedBytes16 offset0800;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(816)] public FixedBytes16 offset0816;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(832)] public FixedBytes16 offset0832;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(848)] public FixedBytes16 offset0848;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(864)] public FixedBytes16 offset0864;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(880)] public FixedBytes16 offset0880;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(896)] public FixedBytes16 offset0896;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(912)] public FixedBytes16 offset0912;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(928)] public FixedBytes16 offset0928;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(944)] public FixedBytes16 offset0944;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(960)] public FixedBytes16 offset0960;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(976)] public FixedBytes16 offset0976;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(992)] public FixedBytes16 offset0992;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1008)] public FixedBytes16 offset1008;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1024)] public FixedBytes16 offset1024;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1040)] public FixedBytes16 offset1040;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1056)] public FixedBytes16 offset1056;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1072)] public FixedBytes16 offset1072;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1088)] public FixedBytes16 offset1088;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1104)] public FixedBytes16 offset1104;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1120)] public FixedBytes16 offset1120;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1136)] public FixedBytes16 offset1136;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1152)] public FixedBytes16 offset1152;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1168)] public FixedBytes16 offset1168;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1184)] public FixedBytes16 offset1184;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1200)] public FixedBytes16 offset1200;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1216)] public FixedBytes16 offset1216;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1232)] public FixedBytes16 offset1232;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1248)] public FixedBytes16 offset1248;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1264)] public FixedBytes16 offset1264;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1280)] public FixedBytes16 offset1280;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1296)] public FixedBytes16 offset1296;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1312)] public FixedBytes16 offset1312;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1328)] public FixedBytes16 offset1328;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1344)] public FixedBytes16 offset1344;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1360)] public FixedBytes16 offset1360;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1376)] public FixedBytes16 offset1376;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1392)] public FixedBytes16 offset1392;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1408)] public FixedBytes16 offset1408;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1424)] public FixedBytes16 offset1424;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1440)] public FixedBytes16 offset1440;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1456)] public FixedBytes16 offset1456;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1472)] public FixedBytes16 offset1472;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1488)] public FixedBytes16 offset1488;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1504)] public FixedBytes16 offset1504;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1520)] public FixedBytes16 offset1520;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1536)] public FixedBytes16 offset1536;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1552)] public FixedBytes16 offset1552;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1568)] public FixedBytes16 offset1568;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1584)] public FixedBytes16 offset1584;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1600)] public FixedBytes16 offset1600;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1616)] public FixedBytes16 offset1616;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1632)] public FixedBytes16 offset1632;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1648)] public FixedBytes16 offset1648;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1664)] public FixedBytes16 offset1664;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1680)] public FixedBytes16 offset1680;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1696)] public FixedBytes16 offset1696;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1712)] public FixedBytes16 offset1712;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1728)] public FixedBytes16 offset1728;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1744)] public FixedBytes16 offset1744;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1760)] public FixedBytes16 offset1760;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1776)] public FixedBytes16 offset1776;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1792)] public FixedBytes16 offset1792;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1808)] public FixedBytes16 offset1808;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1824)] public FixedBytes16 offset1824;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1840)] public FixedBytes16 offset1840;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1856)] public FixedBytes16 offset1856;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1872)] public FixedBytes16 offset1872;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1888)] public FixedBytes16 offset1888;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1904)] public FixedBytes16 offset1904;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1920)] public FixedBytes16 offset1920;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1936)] public FixedBytes16 offset1936;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1952)] public FixedBytes16 offset1952;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1968)] public FixedBytes16 offset1968;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(1984)] public FixedBytes16 offset1984;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2000)] public FixedBytes16 offset2000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2016)] public FixedBytes16 offset2016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2032)] public FixedBytes16 offset2032;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2048)] public FixedBytes16 offset2048;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2064)] public FixedBytes16 offset2064;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2080)] public FixedBytes16 offset2080;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2096)] public FixedBytes16 offset2096;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2112)] public FixedBytes16 offset2112;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2128)] public FixedBytes16 offset2128;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2144)] public FixedBytes16 offset2144;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2160)] public FixedBytes16 offset2160;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2176)] public FixedBytes16 offset2176;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2192)] public FixedBytes16 offset2192;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2208)] public FixedBytes16 offset2208;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2224)] public FixedBytes16 offset2224;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2240)] public FixedBytes16 offset2240;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2256)] public FixedBytes16 offset2256;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2272)] public FixedBytes16 offset2272;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2288)] public FixedBytes16 offset2288;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2304)] public FixedBytes16 offset2304;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2320)] public FixedBytes16 offset2320;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2336)] public FixedBytes16 offset2336;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2352)] public FixedBytes16 offset2352;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2368)] public FixedBytes16 offset2368;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2384)] public FixedBytes16 offset2384;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2400)] public FixedBytes16 offset2400;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2416)] public FixedBytes16 offset2416;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2432)] public FixedBytes16 offset2432;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2448)] public FixedBytes16 offset2448;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2464)] public FixedBytes16 offset2464;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2480)] public FixedBytes16 offset2480;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2496)] public FixedBytes16 offset2496;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2512)] public FixedBytes16 offset2512;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2528)] public FixedBytes16 offset2528;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2544)] public FixedBytes16 offset2544;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2560)] public FixedBytes16 offset2560;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2576)] public FixedBytes16 offset2576;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2592)] public FixedBytes16 offset2592;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2608)] public FixedBytes16 offset2608;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2624)] public FixedBytes16 offset2624;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2640)] public FixedBytes16 offset2640;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2656)] public FixedBytes16 offset2656;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2672)] public FixedBytes16 offset2672;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2688)] public FixedBytes16 offset2688;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2704)] public FixedBytes16 offset2704;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2720)] public FixedBytes16 offset2720;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2736)] public FixedBytes16 offset2736;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2752)] public FixedBytes16 offset2752;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2768)] public FixedBytes16 offset2768;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2784)] public FixedBytes16 offset2784;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2800)] public FixedBytes16 offset2800;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2816)] public FixedBytes16 offset2816;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2832)] public FixedBytes16 offset2832;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2848)] public FixedBytes16 offset2848;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2864)] public FixedBytes16 offset2864;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2880)] public FixedBytes16 offset2880;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2896)] public FixedBytes16 offset2896;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2912)] public FixedBytes16 offset2912;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2928)] public FixedBytes16 offset2928;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2944)] public FixedBytes16 offset2944;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2960)] public FixedBytes16 offset2960;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2976)] public FixedBytes16 offset2976;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(2992)] public FixedBytes16 offset2992;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3008)] public FixedBytes16 offset3008;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3024)] public FixedBytes16 offset3024;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3040)] public FixedBytes16 offset3040;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3056)] public FixedBytes16 offset3056;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3072)] public FixedBytes16 offset3072;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3088)] public FixedBytes16 offset3088;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3104)] public FixedBytes16 offset3104;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3120)] public FixedBytes16 offset3120;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3136)] public FixedBytes16 offset3136;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3152)] public FixedBytes16 offset3152;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3168)] public FixedBytes16 offset3168;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3184)] public FixedBytes16 offset3184;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3200)] public FixedBytes16 offset3200;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3216)] public FixedBytes16 offset3216;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3232)] public FixedBytes16 offset3232;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3248)] public FixedBytes16 offset3248;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3264)] public FixedBytes16 offset3264;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3280)] public FixedBytes16 offset3280;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3296)] public FixedBytes16 offset3296;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3312)] public FixedBytes16 offset3312;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3328)] public FixedBytes16 offset3328;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3344)] public FixedBytes16 offset3344;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3360)] public FixedBytes16 offset3360;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3376)] public FixedBytes16 offset3376;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3392)] public FixedBytes16 offset3392;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3408)] public FixedBytes16 offset3408;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3424)] public FixedBytes16 offset3424;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3440)] public FixedBytes16 offset3440;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3456)] public FixedBytes16 offset3456;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3472)] public FixedBytes16 offset3472;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3488)] public FixedBytes16 offset3488;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3504)] public FixedBytes16 offset3504;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3520)] public FixedBytes16 offset3520;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3536)] public FixedBytes16 offset3536;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3552)] public FixedBytes16 offset3552;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3568)] public FixedBytes16 offset3568;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3584)] public FixedBytes16 offset3584;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3600)] public FixedBytes16 offset3600;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3616)] public FixedBytes16 offset3616;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3632)] public FixedBytes16 offset3632;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3648)] public FixedBytes16 offset3648;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3664)] public FixedBytes16 offset3664;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3680)] public FixedBytes16 offset3680;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3696)] public FixedBytes16 offset3696;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3712)] public FixedBytes16 offset3712;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3728)] public FixedBytes16 offset3728;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3744)] public FixedBytes16 offset3744;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3760)] public FixedBytes16 offset3760;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3776)] public FixedBytes16 offset3776;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3792)] public FixedBytes16 offset3792;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3808)] public FixedBytes16 offset3808;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3824)] public FixedBytes16 offset3824;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3840)] public FixedBytes16 offset3840;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3856)] public FixedBytes16 offset3856;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3872)] public FixedBytes16 offset3872;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3888)] public FixedBytes16 offset3888;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3904)] public FixedBytes16 offset3904;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3920)] public FixedBytes16 offset3920;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3936)] public FixedBytes16 offset3936;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3952)] public FixedBytes16 offset3952;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3968)] public FixedBytes16 offset3968;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(3984)] public FixedBytes16 offset3984;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4000)] public FixedBytes16 offset4000;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4016)] public FixedBytes16 offset4016;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4032)] public FixedBytes16 offset4032;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4048)] public FixedBytes16 offset4048;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4064)] public FixedBytes16 offset4064;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4080)] public byte byte4080;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4081)] public byte byte4081;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4082)] public byte byte4082;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4083)] public byte byte4083;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4084)] public byte byte4084;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4085)] public byte byte4085;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4086)] public byte byte4086;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4087)] public byte byte4087;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4088)] public byte byte4088;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4089)] public byte byte4089;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4090)] public byte byte4090;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4091)] public byte byte4091;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4092)] public byte byte4092;
-
- /// <summary>
- /// For internal use only.
- /// </summary>
- [FieldOffset(4093)] public byte byte4093;
-
- }
- [Obsolete("Renamed to FixedString4096Bytes (UnityUpgradable) -> FixedString4096Bytes", true)]
- public partial struct FixedString4096 {}
-
- /// <summary>
- /// An unmanaged UTF-8 string whose content is stored directly in the 4096-byte struct.
- /// </summary>
- /// <remarks>
- /// The binary layout of this string is guaranteed, for now and all time, to be a length (a little-endian two byte integer)
- /// followed by the bytes of the characters (with no padding). A zero byte always immediately follows the last character.
- /// Effectively, the number of bytes for storing characters is 3 less than 4096 (two length bytes and one null byte).
- ///
- /// This layout is identical to a <see cref="FixedList4096Bytes{T}"/> of bytes, thus allowing reinterpretation between FixedString4096Bytes and FixedList4096Bytes.
- ///
- /// By virtue of being an unmanaged, non-allocated struct with no pointers, this string is fully compatible with jobs and Burst compilation.
- /// Unlike managed string types, these strings can be put in any unmanaged ECS components, FixedList, or any other unmanaged structs.
- /// </remarks>
- [Serializable]
- [StructLayout(LayoutKind.Sequential, Size=4096)]
- [BurstCompatible]
- public partial struct FixedString4096Bytes
- : INativeList<byte>
- , IUTF8Bytes
- , IComparable<String>
- , IEquatable<String>
- , IComparable<FixedString32Bytes>
- , IEquatable<FixedString32Bytes>
- , IComparable<FixedString64Bytes>
- , IEquatable<FixedString64Bytes>
- , IComparable<FixedString128Bytes>
- , IEquatable<FixedString128Bytes>
- , IComparable<FixedString512Bytes>
- , IEquatable<FixedString512Bytes>
- , IComparable<FixedString4096Bytes>
- , IEquatable<FixedString4096Bytes>
- {
- internal const ushort utf8MaxLengthInBytes = 4093;
-
- [SerializeField] internal ushort utf8LengthInBytes;
- [SerializeField] internal FixedBytes4094 bytes;
-
- /// <summary>
- /// Returns the maximum number of UTF-8 bytes that can be stored in this string.
- /// </summary>
- /// <returns>
- /// The maximum number of UTF-8 bytes that can be stored in this string.
- /// </returns>
- public static int UTF8MaxLengthInBytes => utf8MaxLengthInBytes;
-
- /// <summary>
- /// For internal use only. Use <see cref="ToString"/> instead.
- /// </summary>
- /// <value>For internal use only. Use <see cref="ToString"/> instead.</value>
- [CreateProperty]
- [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
- [NotBurstCompatible]
- public string Value => ToString();
-
- /// <summary>
- /// Returns a pointer to the character bytes.
- /// </summary>
- /// <returns>A pointer to the character bytes.</returns>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public unsafe byte* GetUnsafePtr()
- {
- return (byte*) UnsafeUtility.AddressOf(ref bytes);
- }
-
- /// <summary>
- /// The current length in bytes of this string's content.
- /// </summary>
- /// <remarks>
- /// The length value does not include the null-terminator byte.
- /// </remarks>
- /// <param name="value">The new length in bytes of the string's content.</param>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if the new length is out of bounds.</exception>
- /// <value>
- /// The current length in bytes of this string's content.
- /// </value>
- public int Length
- {
- get
- {
- return utf8LengthInBytes;
- }
- set
- {
- CheckLengthInRange(value);
- utf8LengthInBytes = (ushort)value;
- unsafe
- {
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- }
- }
-
- /// <summary>
- /// The number of bytes this string has for storing UTF-8 characters.
- /// </summary>
- /// <value>The number of bytes this string has for storing UTF-8 characters.</value>
- /// <remarks>
- /// Does not include the null-terminator byte.
- ///
- /// A setter is included for conformity with <see cref="INativeList{T}"/>, but <see cref="Capacity"/> is fixed at 4093.
- /// Setting the value to anything other than 4093 throws an exception.
- ///
- /// In UTF-8 encoding, each Unicode code point (character) requires 1 to 4 bytes,
- /// so the number of characters that can be stored may be less than the capacity.
- /// </remarks>
- /// <exception cref="ArgumentOutOfRangeException">Thrown if attempting to set the capacity to anything other than 4093.</exception>
- public int Capacity
- {
- get
- {
- return utf8MaxLengthInBytes;
- }
- set
- {
- CheckCapacityInRange(value);
- }
- }
-
- /// <summary>
- /// Attempts to set the length in bytes. Does nothing if the new length is invalid.
- /// </summary>
- /// <param name="newLength">The desired length.</param>
- /// <param name="clearOptions">Whether added or removed bytes should be cleared (zeroed). (Increasing the length adds bytes; decreasing the length removes bytes.)</param>
- /// <returns>True if the new length is valid.</returns>
- public bool TryResize(int newLength, NativeArrayOptions clearOptions = NativeArrayOptions.ClearMemory)
- {
- if (newLength < 0 || newLength > utf8MaxLengthInBytes)
- return false;
- if (newLength == utf8LengthInBytes)
- return true;
- unsafe
- {
- if (clearOptions == NativeArrayOptions.ClearMemory)
- {
- if (newLength > utf8LengthInBytes)
- UnsafeUtility.MemClear(GetUnsafePtr() + utf8LengthInBytes, newLength - utf8LengthInBytes);
- else
- UnsafeUtility.MemClear(GetUnsafePtr() + newLength, utf8LengthInBytes - newLength);
- }
- utf8LengthInBytes = (ushort)newLength;
- // always null terminate
- GetUnsafePtr()[utf8LengthInBytes] = 0;
- }
- return true;
- }
-
- /// <summary>
- /// Returns true if this string is empty (has no characters).
- /// </summary>
- /// <value>True if this string is empty (has no characters).</value>
- public bool IsEmpty => utf8LengthInBytes == 0;
-
- /// <summary>
- /// Returns the byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <value>The byte at the index.</value>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public byte this[int index]
- {
- get
- {
- unsafe
- {
- CheckIndexInRange(index);
- return GetUnsafePtr()[index];
- }
- }
-
- set
- {
- unsafe
- {
- CheckIndexInRange(index);
- GetUnsafePtr()[index] = value;
- }
- }
- }
-
-
- /// <summary>
- /// Returns the reference to a byte (not character) at an index.
- /// </summary>
- /// <param name="index">A byte index.</param>
- /// <returns>A reference to the byte at the index.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the index is out of bounds.</exception>
- public ref byte ElementAt(int index)
- {
- unsafe
- {
- CheckIndexInRange(index);
- return ref GetUnsafePtr()[index];
- }
- }
-
- /// <summary>
- /// Sets the length to 0.
- /// </summary>
- public void Clear()
- {
- Length = 0;
- }
-
- /// <summary>
- /// Appends a byte.
- /// </summary>
- /// <remarks>
- /// A zero byte will always follow the newly appended byte.
- ///
- /// No validation is performed: it is your responsibility for the bytes of the string to form valid UTF-8 when you're done appending bytes.
- /// </remarks>
- /// <param name="value">A byte to append.</param>
- public void Add(in byte value)
- {
- this[Length++] = value;
- }
-
- /// <summary>
- /// An enumerator over the characters (not bytes) of a FixedString4096Bytes.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// The first <see cref="MoveNext"/> call advances the enumerator's index to the first character.
- /// </remarks>
- public struct Enumerator : IEnumerator
- {
- FixedString4096Bytes target;
- int offset;
- Unicode.Rune current;
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes.Enumerator.
- /// </summary>
- /// <param name="other">A FixeString4096 for which to create an enumerator.</param>
- public Enumerator(FixedString4096Bytes other)
- {
- target = other;
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// Does nothing.
- /// </summary>
- public void Dispose()
- {
- }
-
-
- /// <summary>
- /// Advances the enumerator to the next character.
- /// </summary>
- /// <returns>True if <see cref="Current"/> is valid to read after the call.</returns>
- public bool MoveNext()
- {
- if (offset >= target.Length)
- return false;
-
- unsafe
- {
- Unicode.Utf8ToUcs(out current, target.GetUnsafePtr(), ref offset, target.Length);
- }
-
- return true;
- }
-
- /// <summary>
- /// Resets the enumerator to its initial state.
- /// </summary>
- public void Reset()
- {
- offset = 0;
- current = default;
- }
-
- /// <summary>
- /// The current character.
- /// </summary>
- /// <remarks>
- /// In an enumerator's initial state, <see cref="Current"/> is not valid to read.
- /// </remarks>
- /// <value>The current character.</value>
- public Unicode.Rune Current => current;
-
- object IEnumerator.Current => Current;
- }
-
- /// <summary>
- /// Returns an enumerator for iterating over the characters of this string.
- /// </summary>
- /// <returns>An enumerator for iterating over the characters of the FixedString4096Bytes.</returns>
- public Enumerator GetEnumerator()
- {
- return new Enumerator(this);
- }
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A `System.String` to compare with.</param>
- /// <returns>An integer denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other string.<br/>
- /// +1 denotes that this string should be sorted to follow the other string.<br/>
- /// </returns>
- [NotBurstCompatible]
- public int CompareTo(String other)
- {
- return ToString().CompareTo(other);
- }
-
- /// <summary>
- /// Returns true if this string and another have the same length and all the same characters.
- /// </summary>
- /// <param name="other">A string to compare for equality.</param>
- /// <returns>True if this string and the other have the same length and all the same characters.</returns>
- [NotBurstCompatible]
- public bool Equals(String other)
- {
- unsafe {
- int alen = utf8LengthInBytes;
- int blen = other.Length;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(bytes);
- fixed(char* bptr = other)
- {
- return UTF8ArrayUnsafeUtility.StrCmp(aptr, alen, bptr, blen) == 0;
- }
- }
- }
-
- /// <summary>
- /// Returns a reference to a FixedList4096Bytes<byte> representation of this string.
- /// </summary>
- /// <remarks>
- /// The referenced FixedListByte4096 is the very same bytes as the original FixedString4096Bytes,
- /// so it is only valid as long as the original FixedString4096Bytes is valid.
- /// </remarks>
- /// <returns>A ref to a FixedListByte4096 representation of the FixedString4096Bytes.</returns>
- public unsafe ref FixedList4096Bytes<byte> AsFixedList()
- {
- return ref UnsafeUtility.AsRef<FixedList4096Bytes<byte>>(UnsafeUtility.AddressOf(ref this));
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- [NotBurstCompatible]
- public FixedString4096Bytes(String source)
- {
- this = default;
- var error = Initialize(source);
- CheckCopyError((CopyError)error, source);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes with the characters copied from a string.
- /// </summary>
- /// <param name="source">The source string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- [NotBurstCompatible]
- internal int Initialize(String source)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe
- {
- fixed (char* sourceptr = source)
- {
- var error = UTF8ArrayUnsafeUtility.Copy(GetUnsafePtr(), out utf8LengthInBytes, utf8MaxLengthInBytes, sourceptr, source.Length);
- if(error != CopyError.None)
- return (int)error;
- this.Length = utf8LengthInBytes;
- }
- }
- return 0;
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- public FixedString4096Bytes(Unicode.Rune rune, int count = 1)
- {
- this = default;
- Initialize(rune, count);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes with a single character repeatedly appended some number of times.
- /// </summary>
- /// <param name="rune">The Unicode.Rune to repeat.</param>
- /// <param name="count">The number of times to repeat the character. Default is 1.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(Unicode.Rune rune, int count = 1)
- {
- this = default;
- return (int)this.Append(rune, count);
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString32Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public FixedString4096Bytes(in FixedString32Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString32Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for equality.</param>
- /// <param name="b">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString4096Bytes a, in FixedString32Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString32Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString4096Bytes a, in FixedString32Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString32Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString32Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString64Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public FixedString4096Bytes(in FixedString64Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString64Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for equality.</param>
- /// <param name="b">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString4096Bytes a, in FixedString64Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString64Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString4096Bytes a, in FixedString64Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString64Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString64Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString128Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public FixedString4096Bytes(in FixedString128Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString128Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for equality.</param>
- /// <param name="b">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString4096Bytes a, in FixedString128Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString128Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString4096Bytes a, in FixedString128Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString128Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString128Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString512Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public FixedString4096Bytes(in FixedString512Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString512Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for equality.</param>
- /// <param name="b">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString4096Bytes a, in FixedString512Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString512Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString4096Bytes a, in FixedString512Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString512Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString512Bytes other)
- {
- return this == other;
- }
-
-
- /// <summary>
- /// Returns the lexicographical sort order of this string relative to another.
- /// </summary>
- /// <param name="other">A string to compare with.</param>
- /// <returns>A number denoting the lexicographical sort order of this string relative to the other:
- ///
- /// 0 denotes that both strings have the same sort position.<br/>
- /// -1 denotes that this string should be sorted to precede the other.<br/>
- /// +1 denotes that this string should be sorted to follow the other.<br/>
- /// </returns>
- public int CompareTo(FixedString4096Bytes other)
- {
- return FixedStringMethods.CompareTo(ref this, other);
- }
-
- /// <summary>
- /// Initializes and returns an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- public FixedString4096Bytes(in FixedString4096Bytes other)
- {
- this = default;
- var error = Initialize(other);
- CheckFormatError((FormatError)error);
- }
-
- /// <summary>
- /// Initializes an instance of FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="other">The string to copy.</param>
- /// <returns>zero on success, or non-zero on error.</returns>
- internal int Initialize(in FixedString4096Bytes other)
- {
- bytes = default;
- utf8LengthInBytes = 0;
- unsafe {
- int len = 0;
- byte* dstBytes = GetUnsafePtr();
- byte* srcBytes = (byte*) UnsafeUtilityExtensions.AddressOf(other.bytes);
- var srcLength = other.utf8LengthInBytes;
- var error = UTF8ArrayUnsafeUtility.AppendUTF8Bytes(dstBytes, ref len, utf8MaxLengthInBytes, srcBytes, srcLength);
- if(error != FormatError.None)
- return (int)error;
- this.Length = len;
- }
- return 0;
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for equality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public static bool operator ==(in FixedString4096Bytes a, in FixedString4096Bytes b)
- {
- // this must not call any methods on 'a' or 'b'
- unsafe {
- int alen = a.utf8LengthInBytes;
- int blen = b.utf8LengthInBytes;
- byte* aptr = (byte*) UnsafeUtilityExtensions.AddressOf(a.bytes);
- byte* bptr = (byte*) UnsafeUtilityExtensions.AddressOf(b.bytes);
- return UTF8ArrayUnsafeUtility.EqualsUTF8Bytes(aptr, alen, bptr, blen);
- }
- }
-
- /// <summary>
- /// Returns true if a FixedString4096Bytes and another string are unequal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="a">A FixedString4096Bytes to compare for inequality.</param>
- /// <param name="b">A FixedString4096Bytes to compare for inequality.</param>
- /// <returns>True if the two strings are unequal.</returns>
- public static bool operator !=(in FixedString4096Bytes a, in FixedString4096Bytes b)
- {
- return !(a == b);
- }
-
- /// <summary>
- /// Returns true if this string and another string are equal.
- /// </summary>
- /// <remarks>Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="other">A FixedString4096Bytes to compare for equality.</param>
- /// <returns>True if the two strings are equal.</returns>
- public bool Equals(FixedString4096Bytes other)
- {
- return this == other;
- }
-
- /// <summary>
- /// Returns a new FixedString4096Bytes that is a copy of another string.
- /// </summary>
- /// <param name="b">A string to copy.</param>
- /// <returns>A new FixedString4096Bytes that is a copy of another string.</returns>
- /// <exception cref="IndexOutOfRangeException">Thrown if the string to copy's length exceeds the capacity of FixedString4096Bytes.</exception>
- [NotBurstCompatible]
- public static implicit operator FixedString4096Bytes(string b) => new FixedString4096Bytes(b);
-
- /// <summary>
- /// Returns a new managed string that is a copy of this string.
- /// </summary>
- /// <returns>A new managed string that is a copy of this string.</returns>
- [NotBurstCompatible]
- public override String ToString()
- {
- return this.ConvertToString();
- }
-
- /// <summary>
- /// Returns a hash code of this string.
- /// </summary>
- /// <remarks>Only the character bytes are included in the hash: any bytes beyond <see cref="Length"/> are not part of the hash.</remarks>
- /// <returns>The hash code of this string.</returns>
- public override int GetHashCode()
- {
- return this.ComputeHashCode();
- }
-
- /// <summary>
- /// Returns true if this string and an object are equal.
- /// </summary>
- /// <remarks>
- /// Returns false if the object is neither a System.String or a FixedString.
- ///
- /// Two strings are equal if they have equal length and all their characters match.</remarks>
- /// <param name="obj">An object to compare for equality.</param>
- /// <returns>True if this string and the object are equal.</returns>
- [NotBurstCompatible]
- public override bool Equals(object obj)
- {
- if(ReferenceEquals(null, obj)) return false;
- if(obj is String aString) return Equals(aString);
- if(obj is FixedString32Bytes aFixedString32Bytes) return Equals(aFixedString32Bytes);
- if(obj is FixedString64Bytes aFixedString64Bytes) return Equals(aFixedString64Bytes);
- if(obj is FixedString128Bytes aFixedString128Bytes) return Equals(aFixedString128Bytes);
- if(obj is FixedString512Bytes aFixedString512Bytes) return Equals(aFixedString512Bytes);
- if(obj is FixedString4096Bytes aFixedString4096Bytes) return Equals(aFixedString4096Bytes);
- return false;
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckIndexInRange(int index)
- {
- if (index < 0)
- throw new IndexOutOfRangeException($"Index {index} must be positive.");
- if (index >= utf8LengthInBytes)
- throw new IndexOutOfRangeException($"Index {index} is out of range in FixedString4096Bytes of '{utf8LengthInBytes}' Length.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckLengthInRange(int length)
- {
- if (length < 0)
- throw new ArgumentOutOfRangeException($"Length {length} must be positive.");
- if (length > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Length {length} is out of range in FixedString4096Bytes of '{utf8MaxLengthInBytes}' Capacity.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- void CheckCapacityInRange(int capacity)
- {
- if (capacity > utf8MaxLengthInBytes)
- throw new ArgumentOutOfRangeException($"Capacity {capacity} must be lower than {utf8MaxLengthInBytes}.");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckCopyError(CopyError error, String source)
- {
- if (error != CopyError.None)
- throw new ArgumentException($"FixedString4096Bytes: {error} while copying \"{source}\"");
- }
-
- [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")]
- static void CheckFormatError(FormatError error)
- {
- if (error != FormatError.None)
- throw new ArgumentException("Source is too long to fit into fixed string of this size");
- }
- }
- }
|