From bc02127873d1c373fd081e564eca2a9c8d0ffbdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E5=8D=B4?= <479813005@qq.com> Date: Sun, 16 Oct 2022 15:41:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0unity=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 15 + README.md | 8 + UnityPackage/Assets/Down.prefab | 23 +- UnityPackage/Assets/Message.cs | 50 + UnityPackage/Assets/Message.cs.meta | 11 + UnityPackage/Assets/Plugins.meta | 8 + .../Plugins/Megumin.Protobuf-netLUT.dll | Bin 0 -> 7680 bytes .../Plugins/Megumin.Protobuf-netLUT.dll.meta | 33 + .../Plugins/Megumin.Protobuf-netLUT.pdb | Bin 0 -> 9060 bytes .../Plugins/Megumin.Protobuf-netLUT.pdb.meta | 7 + .../Plugins/Megumin.Protobuf-netLUT.xml | 39 + .../Plugins/Megumin.Protobuf-netLUT.xml.meta | 7 + .../Plugins/System.Collections.Immutable.dll | Bin 0 -> 189312 bytes .../System.Collections.Immutable.dll.meta | 33 + .../Plugins/System.Collections.Immutable.xml | 5380 +++++++++++++++++ .../System.Collections.Immutable.xml.meta | 7 + .../Assets/Plugins/protobuf-net.Core.dll | Bin 0 -> 271360 bytes .../Assets/Plugins/protobuf-net.Core.dll.meta | 33 + .../Assets/Plugins/protobuf-net.Core.xml | 4443 ++++++++++++++ .../Assets/Plugins/protobuf-net.Core.xml.meta | 7 + UnityPackage/Assets/Plugins/protobuf-net.dll | Bin 0 -> 261120 bytes .../Assets/Plugins/protobuf-net.dll.meta | 33 + UnityPackage/Assets/Plugins/protobuf-net.xml | 1427 +++++ .../Assets/Plugins/protobuf-net.xml.meta | 7 + .../Net/Plugins/Megumin.MessageStandard.dll | Bin 29696 -> 30720 bytes .../Net/Plugins/Megumin.MessageStandard.pdb | Bin 17804 -> 18372 bytes .../Net/Plugins/Megumin.MessageStandard.xml | 41 +- .../Packages/Net/Plugins/Megumin.Remote.dll | Bin 96256 -> 96256 bytes .../Packages/Net/Plugins/Megumin.Remote.pdb | Bin 38552 -> 38368 bytes .../Packages/Net/Plugins/Megumin.Remote.xml | 467 +- .../Net/Plugins/NetRemoteStandard.dll | Bin 8192 -> 8192 bytes .../Net/Plugins/NetRemoteStandard.pdb | Bin 8292 -> 8368 bytes .../Net/Plugins/NetRemoteStandard.xml | 88 +- UnityPackage/Packages/Net/Runtime/OpTest.cs | 16 +- 34 files changed, 11863 insertions(+), 320 deletions(-) create mode 100644 UnityPackage/Assets/Message.cs create mode 100644 UnityPackage/Assets/Message.cs.meta create mode 100644 UnityPackage/Assets/Plugins.meta create mode 100644 UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll create mode 100644 UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll.meta create mode 100644 UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb create mode 100644 UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb.meta create mode 100644 UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml create mode 100644 UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml.meta create mode 100644 UnityPackage/Assets/Plugins/System.Collections.Immutable.dll create mode 100644 UnityPackage/Assets/Plugins/System.Collections.Immutable.dll.meta create mode 100644 UnityPackage/Assets/Plugins/System.Collections.Immutable.xml create mode 100644 UnityPackage/Assets/Plugins/System.Collections.Immutable.xml.meta create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.Core.dll create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.Core.dll.meta create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.Core.xml create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.Core.xml.meta create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.dll create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.dll.meta create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.xml create mode 100644 UnityPackage/Assets/Plugins/protobuf-net.xml.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index e847d45..cdf5c35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> --- +## [3.0.0] - 2022-10-16 + +### Added +- 从Remote拆分IDisconnectHandler。 +- 从Remote拆分Transport。 +### Changed +- 公开大部分Remote 中间处理过程 API。 +- 整理ITransportable 和 IRemote 和 IListener接口 +- 重命名 interface ISendCanAwaitable -> ISendAsyncable +### Deprecated +### Removed +### Fixed +- 修复Tcp半包假死BUG。 +- 调整 void Send(T message, int rpcID, object options = null) 参数顺序,消除Rpc send reply 二义性。 +### Security ## [2.1.0] - 2022-10-04 ### Added diff --git a/README.md b/README.md index d66973f..e671761 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,14 @@ ~~由于使用了C# 7.3语法,在unity中如果使用源码至少需要2018.3。~~ 目标框架netstandard2.1,在unity中建议unity版本2021.2以上。过小的版本可以使用源码,但需要自行解决依赖关系。 +# UPM Package +## Install via git URL +![image](https://user-images.githubusercontent.com/46207/79450714-3aadd100-8020-11ea-8aae-b8d87fc4d7be.png) + +or add `"com.megumin.net": "https://github.com/KumoKyaku/Megumin.Net.git?path=UnityPackage/Packages/Net"` to `Packages/manifest.json`. + +>If you want to set a target version, uses the `*.*.*` release tag so you can specify a version like `#2.1.0`. For example `https://github.com/KumoKyaku/Megumin.Net.git?path=UnityPackage/Packages/Net#2.1.0`. + # 优势 - 支持Tcp,Udp,Kcp。 - 使用内存池和多线程处理收发,可配置线程调度,无需担心网络模块性能问题。 diff --git a/UnityPackage/Assets/Down.prefab b/UnityPackage/Assets/Down.prefab index b362bee..48b02e7 100644 --- a/UnityPackage/Assets/Down.prefab +++ b/UnityPackage/Assets/Down.prefab @@ -481,7 +481,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 4719638640884593875} - - component: {fileID: 4719638640884593874} m_Layer: 5 m_Name: Down m_TagString: Untagged @@ -510,26 +509,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &4719638640884593874 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4719638640884593872} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 502824a48032a1040a9eb36b00c6fb64, type: 3} - m_Name: - m_EditorClassIdentifier: - inputIP: {fileID: 4719638642204526454} - inputPort: {fileID: 4719638642098904941} - localIP: {fileID: 4719638641995141201} - localPort: {fileID: 4719638641549124820} - globalIP: {fileID: 4719638641982320754} - globalPort: {fileID: 4719638642719861915} - Send: {fileID: 4719638640879706388} - PingText: {fileID: 1488276339577847404} --- !u!1 &4719638640912843355 GameObject: m_ObjectHideFlags: 0 @@ -1204,7 +1183,7 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 4719638640884593874} + - m_Target: {fileID: 0} m_TargetAssemblyTypeName: UdpSocketTest, Assembly-CSharp m_MethodName: GetIP m_Mode: 1 diff --git a/UnityPackage/Assets/Message.cs b/UnityPackage/Assets/Message.cs new file mode 100644 index 0000000..3c04a0e --- /dev/null +++ b/UnityPackage/Assets/Message.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using Megumin; +using Megumin.Message; +using Megumin.Remote; +using ProtoBuf; +using UnityEngine; + +[MSGID(1001)] +[ProtoContract] +public class Login +{ + [ProtoMember(1)] + public string IP { get; set; } +} + +[MSGID(1002)] +public class LoginResult +{ + [ProtoMember(1)] + public string TempKey { get; set; } +} + +public class Message : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + [Button] + public void Test() + { + Protobuf_netLUT.Regist(); + Protobuf_netLUT.Regist(); + + Login login = new Login() { IP = "test" }; + MessageLUTTestBuffer buffer = new MessageLUTTestBuffer(); + var msgid = Protobuf_netLUT.Serialize(buffer,login); + var login2 = Protobuf_netLUT.Deserialize(msgid, buffer.ReadOnlySequence) as Login; + Debug.Log($"{msgid}--{login.IP}--{login2.IP}"); + } +} diff --git a/UnityPackage/Assets/Message.cs.meta b/UnityPackage/Assets/Message.cs.meta new file mode 100644 index 0000000..63434ca --- /dev/null +++ b/UnityPackage/Assets/Message.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 194daadbd476f244c87e6d06d687643c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins.meta b/UnityPackage/Assets/Plugins.meta new file mode 100644 index 0000000..010edf8 --- /dev/null +++ b/UnityPackage/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c8747fef37f76d48aecd2c5ad550b09 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll new file mode 100644 index 0000000000000000000000000000000000000000..05790e394d218069ae5a56534630629b371dda04 GIT binary patch literal 7680 zcmeHLeRNdEb-(lWL#r>)u0VhhVnJXQBo>LU7TY-b1Z0o|TFFRQ1U>COt)8{JZ+Y*n zU~M46U!k?ZR$`|$cAbDtgWY4h?(wlHHJmuKjT46+V#f_9!SNS3cEf31+NNpJnEqz= zz1>A}zW!^^=}7N4_ujd4=gyrwv+qs&wui_;L{2Zv=>RMEniQ1R=jgkMegTRKDjxE4`@rKLp+EYq7?i8e6@ zm7o9qd3&^XX}-Uh)e%)d;?78KU4`0@rvVR9nV_YN-(0}`7iA0x`9Jp(<~49HSLOe? z+G4o~g~4toCmM*(^FT~214Jc|O% z`NdB(5Y!Dl459F?0R*4uOgwp|0p167C8j}<`$_|NxUEV&d8L7SvUNr%bHAU{)eu*pB1TgWM;)2@tbKs-^LQquV znQ;&)!WLFYN3~fHlorl7h#GhFdJmK)9Xw@#>!n@SFOkEas&{aBH`za z7#Bvp=P=@IVY$eia{*)e-8mOZJhfhrux`wO0V!h!{!0|KqB6JCsLD1~8gsLBmEq6Q zbBm05Ii}b^+%02sON{CqGu2p-W2P7jv&@nzDR4bF)OTW@q7Lx-4k@shYdQ9Ev2?D~ zp4DE_e1pSzjEh`+p=y@E=khuS!AYK4UdPTUXmb|(q)(@FEl)uJI}q#e0O$BRMe$FGvNp zb;r@-LO$3p*b2Ts`RFxxkSk()aU1-I;&S*Y_B-F2oabZl8g|6P`*3}`jmr@Llv|u! z#t*vd9bT84P7AzIddE4H>iJ%xA*s&krelshz<-iBjtaU^;Qc~!T;O&g=@j&3#x>*4 zU9kBN632Pcf4Pe2DSDf^X+Av$$xmE+oJI7$gG*jzL(VC*&anuRF9@AyTtlFbIeF_B zq${u%q#@wA@Q?`$JA}k7anC!2WIJrSX&U_io*!~@T4s*|W3cb0q|krO$?1oL#Z;H&qO6qqv)o=bmA)vr_t-BTi^xmkS#Bkj z(_>k#k@(L8qfcCAWfFaWY+&^FEJK%-F-S7V<%fmlONgRG7aV0}4*If-M{%3b|7|qy zW$R3)9i-wH;SFS}7wD#0z#>`6gHez}v{<3{se80!L_-vr$-nS0FJyN`&1Hd`jR&feR!q zi3og3pa=W4Q|h1rdYP*6M#hj&577c_n^P>{kdW&RvDRtro}*Km6LJ;Y>P4^r()(hO^?f_qVujzsi7f7->Rz_ z-tN$@#5Fz56%yu(<#bcK7D>gFo2fmt9zQ`*#oS?4?TTT@Q3YH)OIfl_J>Arsv2gKY^Y(u^O)K0lF2pj-I0w6 zX0F4A6|F8r-&Cm4FqHUUEZwe{azr-eMicJ`gDJE$Yw@HSQ*<#PJc#6)dJ>}u+mOn$ zp&1`9xt11XFcpn*c}`{z(XE>K;%-@ozw7W-r0ml4k(_>8B1hYO*TIup72Uw9O>S&U z42f(*qa2&06;i?}q+WWnqQ_O^vn@1hi6J$b(q*0&lLu%~jIgdIuWii4NA&1YV)AZ5 z8M)3P{b1PC<*=C(+cQFQB=uPh%~~?8tI^@SK5d4*XC~X>ZpevruEEMEAve`QHHNw8 zT1VwrN}-KPx-o{-jHEZnqY8zvnsQ9NV`6p$+pKJ{cXJSt$m)s-VsDeRv8;iE)(T(; zWs^;)=C)=q5{p^AFm`5n8pW2(+ERwBO$rmr!k}*LU_mse z3{#6|<8ROeLF;Z)N${l1j$#KSm`hlLG?9E+oy>`9Q0L(7ILfZs?gGQ8ecI%UDodI?jY!9rT5Bl48idX-8&nHc%H?LV#Dh;=j)6ba4;V0$- z;q`KMipwvtDL@F;x~BWunXAMvRnCoZe7gIWAF^ljQa| z+`c}koZz8@yLc~iRZ%7UDW`%0M>$oNV*oEE%oX4-C!qitB4W!xW@LzkEdvQz5#nb> z&mwv3ERsjg^W8hkuby4{_7=~qy`Lt&l$^HMv+&L>=l2HNqhnvg+a5W`h#tl&x+MVk zu25q=f8XG*z()?GZ!Y`M#vh!$z4+s|A3U@F!d<`m-j9CazvtifU4G<9>YHlCH{>_A z>`zx5c<}XIFLX}Z(pLUj&&ue=N2~sH^zL_$ezZiYzHlP2>izHTOWb`&$CCTLRgr#v zbRc%eJKs;-^`Eo;?&;nqe>~?)p0|d(Up-U%%)t1wj|Wb^;GFaA8>W@LcyaB~1shI_ zFFg1{G+D&(JXnu!;ksIXGu}l~y0SK* zq;L?&YW#@G@>S93BPb*ajN6Z zkC;fKE#4kc_j!BVNJ8fAaS=zSpL~7Aeme~+D;)v6fCeD+FzcHZ?^cYurHZY(ob1pN zt-HgD*wo#_y0*(;(BrE_w3^YZU`K1W{XS7^&uJ8sf`uv5vcH)vs*#Mz=??saQZXa< z#gpTg4!(#FeSC%CH%XBVh4?$&tn6=!KM-E*UtU+g#&7E`WfZVZ`3}Xrc;eZg9KPqn zmkxZm|M^QNAG~znPcA+1m5=W}e(At{AB^3Vv5dF|annFFl~GZyE3VcU&9GlDCY<<0 zH!>>iQj(gX;wVn{=&``CX(o*umMx2_=5T5-7}ny;Hm2g*#)N*VSM#qsRQ~eCzdEj882ai=`3w^i0b^OHRKfdyEN!wQ+?>YSHc;Wk}6UUQ#_g_BM^k*9vT=(B~cRix<>lQjm+fNZ|-^|xZ$1}VV z55MfN3V(Sn$Ac>-`XSnWnAgTt_+3YS=?b-kPB+yKwG8U5f86`Z6TP#aXy7)s-q62Z zHT&~I&_5xZ{o3H|{niTi=WPIFNVeOAF2Q7EkU|?8m#- z^`rMcx6i%Ux&Yco35pwGylg7shu-RUbs@}548dfZ z|LY`7IE_23v1?u9+gaRkO_FoH4S0GRi1y@tsO@neDd<*wq3!^-QWvN;+z@quZv(E& z+`8l5=U+a}ef5bm68)U?IUp}wk~u2`E1(6)U{ywDuEWhlj1<^R&=6^&eSzrJjaC^_ z1MM=I(9^(W%3nG!z$k-HCbU$@qn}~vgwUzO-CpKzB@K#uz9xL#Gkk|@6vv-}-X=yN zY6l&q6lC0D2RM_KcHA?1Ag&EO`1u)K6`_wFa(78MO^B|?m$PjnDf~>Mhb-*z_VErg z#Oq#M_Oq;SEwE|eOP~9kyk<_UMOxEprsa8l>&-ikII zmUA(x!(AVLR*IVYQ3-t>WmD)T;A_#^mP0lS-EGb$|ds3s{bW*DVm zjD~GFN#>^jqOcg7Y&pEFr!}B55gQPGc3S=UI&eSjEa4nqv59N-+v1h;cQtNmm=)a! zA{&N>`RjIV95Ok8;Sfh2@64*${U%0zV$AU-AEZ1pWsN6W8AW literal 0 HcmV?d00001 diff --git a/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll.meta b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll.meta new file mode 100644 index 0000000..1f3bab3 --- /dev/null +++ b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: c4c62ecdd8f881241ab6a0bcfead7322 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb new file mode 100644 index 0000000000000000000000000000000000000000..f8d51ac41c1cdd4e011d4088051edacfa1a7d474 GIT binary patch literal 9060 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 TvD8KI`aE^r96ry?R5$(yRp3Gx literal 0 HcmV?d00001 diff --git a/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb.meta b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb.meta new file mode 100644 index 0000000..00084fa --- /dev/null +++ b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c9b0b2ab7cbb014cb7edbf9041529bd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml new file mode 100644 index 0000000..c1bc781 --- /dev/null +++ b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml @@ -0,0 +1,39 @@ + + + + Megumin.Protobuf-netLUT + + + + + 适用于Protobuf-net协议的查找表 没有测试 + + + + + 注册程序集中所有协议类 + + + + + + + 注册消息类型 + + + + + + + 注册消息类型 + + + + + + 注册基础类型 + + + + + diff --git a/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml.meta b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml.meta new file mode 100644 index 0000000..68cc4c0 --- /dev/null +++ b/UnityPackage/Assets/Plugins/Megumin.Protobuf-netLUT.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1054e6450347ed54ba3d4f900cec2ad0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/System.Collections.Immutable.dll b/UnityPackage/Assets/Plugins/System.Collections.Immutable.dll new file mode 100644 index 0000000000000000000000000000000000000000..f737e4213bfbea60f5f25b55c651622fe6ea3b40 GIT binary patch literal 189312 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 NdzX@OPU2we{{zFJgaQBn literal 0 HcmV?d00001 diff --git a/UnityPackage/Assets/Plugins/System.Collections.Immutable.dll.meta b/UnityPackage/Assets/Plugins/System.Collections.Immutable.dll.meta new file mode 100644 index 0000000..a5ab695 --- /dev/null +++ b/UnityPackage/Assets/Plugins/System.Collections.Immutable.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 71907953652d088488817cb20eb3301a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/System.Collections.Immutable.xml b/UnityPackage/Assets/Plugins/System.Collections.Immutable.xml new file mode 100644 index 0000000..4fa815c --- /dev/null +++ b/UnityPackage/Assets/Plugins/System.Collections.Immutable.xml @@ -0,0 +1,5380 @@ + + + + System.Collections.Immutable + + + + Represents an immutable collection of key/value pairs. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of keys in the dictionary. + The type of values in the dictionary. + + + Adds an element with the specified key and value to the dictionary. + The key of the element to add. + The value of the element to add. + The given key already exists in the dictionary but has a different value. + A new immutable dictionary that contains the additional key/value pair. + + + Adds the specified key/value pairs to the dictionary. + The key/value pairs to add. + One of the given keys already exists in the dictionary but has a different value. + A new immutable dictionary that contains the additional key/value pairs. + + + Retrieves an empty dictionary that has the same ordering and key/value comparison rules as this dictionary instance. + An empty dictionary with equivalent ordering and key/value comparison rules. + + + Determines whether the immutable dictionary contains the specified key/value pair. + The key/value pair to locate. + + if the specified key/value pair is found in the dictionary; otherwise, . + + + Removes the element with the specified key from the immutable dictionary. + The key of the element to remove. + A new immutable dictionary with the specified element removed; or this instance if the specified key cannot be found in the dictionary. + + + Removes the elements with the specified keys from the immutable dictionary. + The keys of the elements to remove. + A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. + + + Sets the specified key and value in the immutable dictionary, possibly overwriting an existing value for the key. + The key of the entry to add. + The key value to set. + A new immutable dictionary that contains the specified key/value pair. + + + Sets the specified key/value pairs in the immutable dictionary, possibly overwriting existing values for the keys. + The key/value pairs to set in the dictionary. If any of the keys already exist in the dictionary, this method will overwrite their previous values. + A new immutable dictionary that contains the specified key/value pairs. + + + Determines whether this dictionary contains a specified key. + The key to search for. + The matching key located in the dictionary if found, or equalkey if no match is found. + + if a match for is found; otherwise, . + + + Represents a list of elements that cannot be modified. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the list. + + + Makes a copy of the list, and adds the specified object to the end of the copied list. + The object to add to the list. + A new list with the object added. + + + Makes a copy of the list and adds the specified objects to the end of the copied list. + The objects to add to the list. + A new list with the elements added. + + + Creates a list with all the items removed, but with the same sorting and ordering semantics as this list. + An empty list that has the same sorting and ordering semantics as this instance. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements. + The object to locate in the . This value can be null for reference types. + The zero-based starting indexes of the search. 0 (zero) is valid in an empty list. + The number of elements in the section to search. + The equality comparer to use to locate . + The zero-based index of the first occurrence of within the range of elements in the that starts at and contains number of elements if found; otherwise -1. + + + Inserts the specified element at the specified index in the immutable list. + The zero-based index at which to insert the value. + The object to insert. + A new immutable list that includes the specified element. + + + Inserts the specified elements at the specified index in the immutable list. + The zero-based index at which the new elements should be inserted. + The elements to insert. + A new immutable list that includes the specified elements. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the that contains the specified number of elements and ends at the specified index. + The object to locate in the list. The value can be for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The number of elements in the section to search. + The equality comparer to match . + Returns . + + + Removes the first occurrence of a specified object from this immutable list. + The object to remove from the list. + The equality comparer to use to locate . + A new list with the specified object removed. + + + Removes all the elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to remove. + A new immutable list with the elements removed. + + + Removes the element at the specified index of the immutable list. + The index of the element to remove. + A new list with the element removed. + + + Removes the specified object from the list. + The objects to remove from the list. + The equality comparer to use to determine if match any objects in the list. + A new immutable list with the specified objects removed, if matched objects in the list. + + + Removes a range of elements from the . + The zero-based starting index of the range of elements to remove. + The number of elements to remove. + A new immutable list with the elements removed. + + + Returns a new list with the first matching element in the list replaced with the specified element. + The element to be replaced. + The element to replace the first occurrence of with + The equality comparer to use for matching . + + does not exist in the list. + A new list that contains , even if is the same as . + + + Replaces an element in the list at a given position with the specified element. + The position in the list of the element to replace. + The element to replace the old element with. + A new list that contains the new element, even if the element at the specified location is the same as the new element. + + + Represents an immutable first-in, first-out collection of objects. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the queue. + + + Returns a new queue with all the elements removed. + An empty immutable queue. + + + Removes the first element in the immutable queue, and returns the new queue. + The queue is empty. + The new immutable queue with the first element removed. This value is never . + + + Adds an element to the end of the immutable queue, and returns the new queue. + The element to add. + The new immutable queue with the specified element added. + + + Returns the element at the beginning of the immutable queue without removing it. + The queue is empty. + The element at the beginning of the queue. + + + Gets a value that indicates whether this immutable queue is empty. + + if this queue is empty; otherwise, . + + + Represents a set of elements that can only be modified by creating a new instance of the set. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of element stored in the set. + + + Adds the specified element to this immutable set. + The element to add. + A new set with the element added, or this set if the element is already in the set. + + + Retrieves an empty immutable set that has the same sorting and ordering semantics as this instance. + An empty set that has the same sorting and ordering semantics as this instance. + + + Determines whether this immutable set contains a specified element. + The element to locate in the set. + + if the set contains the specified value; otherwise, . + + + Removes the elements in the specified collection from the current immutable set. + The collection of items to remove from this set. + A new set with the items removed; or the original set if none of the items were in the set. + + + Creates an immutable set that contains only elements that exist in this set and the specified set. + The collection to compare to the current . + A new immutable set that contains elements that exist in both sets. + + + Determines whether the current immutable set is a proper (strict) subset of the specified collection. + The collection to compare to the current set. + + if the current set is a proper subset of the specified collection; otherwise, . + + + Determines whether the current immutable set is a proper (strict) superset of the specified collection. + The collection to compare to the current set. + + if the current set is a proper superset of the specified collection; otherwise, . + + + Determines whether the current immutable set is a subset of a specified collection. + The collection to compare to the current set. + + if the current set is a subset of the specified collection; otherwise, . + + + Determines whether the current immutable set is a superset of a specified collection. + The collection to compare to the current set. + + if the current set is a superset of the specified collection; otherwise, . + + + Determines whether the current immutable set overlaps with the specified collection. + The collection to compare to the current set. + + if the current set and the specified collection share at least one common element; otherwise, . + + + Removes the specified element from this immutable set. + The element to remove. + A new set with the specified element removed, or the current set if the element cannot be found in the set. + + + Determines whether the current immutable set and the specified collection contain the same elements. + The collection to compare to the current set. + + if the sets are equal; otherwise, . + + + Creates an immutable set that contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + A new set that contains the elements that are present only in the current set or in the specified collection, but not both. + + + Determines whether the set contains a specified value. + The value to search for. + The matching value from the set, if found, or equalvalue if there are no matches. + + if a matching value was found; otherwise, . + + + Creates a new immutable set that contains all elements that are present in either the current set or in the specified collection. + The collection to add elements from. + A new immutable set with the items added; or the original set if all the items were already in the set. + + + Represents an immutable last-in-first-out (LIFO) collection. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the stack. + + + Removes all objects from the immutable stack. + An empty immutable stack. + + + Returns the element at the top of the immutable stack without removing it. + The stack is empty. + The element at the top of the stack. + + + Removes the element at the top of the immutable stack and returns the new stack. + The stack is empty. + The new stack; never + + + Inserts an element at the top of the immutable stack and returns the new stack. + The element to push onto the stack. + The new stack. + + + Gets a value that indicates whether this immutable stack is empty. + + if this stack is empty; otherwise,. + + + Provides methods for creating an array that is immutable; meaning it cannot be changed once it is created. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Searches the sorted immutable array for a specified element using the default comparer and returns the zero-based index of the element, if it's found. + The sorted array to search. + The object to search for. + The type of element stored in the array. + + does not implement or the search encounters an element that does not implement . + The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than or, if there is no larger element, the bitwise complement of . + + + Searches a sorted immutable array for a specified element and returns the zero-based index of the element, if it's found. + The sorted array to search. + The object to search for. + The comparer implementation to use when comparing elements, or null to use the default comparer. + The type of element stored in the array. + + is null and does not implement or the search encounters an element that does not implement . + The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than or, if there is no larger element, the bitwise complement of . + + + Searches a sorted immutable array for a specified element and returns the zero-based index of the element, if it's found. + The sorted array to search. + The starting index of the range to search. + The length of the range to search. + The object to search for. + The type of element stored in the array. + + does not implement or the search encounters an element that does not implement . + + and do not specify a valid range in . + + is less than the lower bound of . + +-or- + + is less than zero. + The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than or, if there is no larger element, the bitwise complement of . + + + Searches a sorted immutable array for a specified element and returns the zero-based index of the element. + The sorted array to search. + The starting index of the range to search. + The length of the range to search. + The object to search for. + The comparer to use when comparing elements for equality or to use the default comparer. + The type of element stored in the array. + + is null and does not implement or the search encounters an element that does not implement . + + and do not specify a valid range in . + +-or- + + is , and is of a type that is not compatible with the elements of . + + is less than the lower bound of . + +-or- + + is less than zero. + The zero-based index of the item in the array, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than or, if there is no larger element, the bitwise complement of . + + + Creates an empty immutable array. + The type of elements stored in the array. + An empty immutable array. + + + Creates an immutable array that contains the specified object. + The object to store in the array. + The type of elements stored in the array. + An immutable array that contains the specified object. + + + Creates an immutable array that contains the specified objects. + The first object to store in the array. + The second object to store in the array. + The type of elements stored in the array. + An immutable array that contains the specified objects. + + + Creates an immutable array that contains the specified objects. + The first object to store in the array. + The second object to store in the array. + The third object to store in the array. + The type of elements stored in the array. + An immutable array that contains the specified objects. + + + Creates an immutable array that contains the specified objects. + The first object to store in the array. + The second object to store in the array. + The third object to store in the array. + The fourth object to store in the array. + The type of elements stored in the array. + An immutable array that contains the specified objects. + + + Creates an immutable array from the specified array of objects. + The array of objects to populate the array with. + The type of elements stored in the array. + An immutable array that contains the array of items. + + + Creates an immutable array with specified objects from another array. + The source array of objects. + The index of the first element to copy from . + The number of elements from to include in this immutable array. + The type of elements stored in the array. + An immutable array that contains the specified objects from the source array. + + + Creates an immutable array with the specified objects from another immutable array. + The source array of objects. + The index of the first element to copy from . + The number of elements from to include in this immutable array. + The type of elements stored in the array. + An immutable array that contains the specified objects from the source array. + + + Creates a mutable array that can be converted to an without allocating new memory. + The type of elements stored in the builder. + A mutable array of the specified type that can be efficiently converted to an immutable array. + + + Creates a mutable array that can be converted to an without allocating new memory. + The initial capacity of the builder. + The type of elements stored in the builder. + A mutable array of the specified type that can be efficiently converted to an immutable array. + + + Creates a new populated with the specified items. + The elements to add to the array. + The type of element stored in the array. + An immutable array that contains the specified items. + + + Initializes a new instance of the struct. + The source array to initialize the resulting array with. + The function to apply to each element from the source array. + The type of element stored in the source array. + The type of element to store in the target array. + An immutable array that contains the specified items. + + + Initializes a new instance of the struct. + The source array to initialize the resulting array with. + The index of the first element in the source array to include in the resulting array. + The number of elements from the source array to include in the resulting array. + The function to apply to each element from the source array included in the resulting array. + The type of element stored in the source array. + The type of element to store in the target array. + An immutable array that contains the specified items. + + + Initializes a new instance of the struct. + The source array to initialize the resulting array with. + The function to apply to each element from the source array. + An argument to be passed to the selector mapping function. + The type of element stored in the source array. + The type of argument to pass to the selector mapping function. + The type of element to store in the target array. + An immutable array that contains the specified items. + + + Initializes a new instance of the struct. + The source array to initialize the resulting array with. + The index of the first element in the source array to include in the resulting array. + The number of elements from the source array to include in the resulting array. + The function to apply to each element from the source array included in the resulting array. + An argument to be passed to the selector mapping function. + The type of element stored in the source array. + The type of argument to be passed to the selector mapping function. + The type of element to be stored in the target array. + An immutable array that contains the specified items. + + + Creates an immutable array from the specified collection. + The collection of objects to copy to the immutable array. + The type of elements contained in . + An immutable array that contains the specified collection of objects. + + + Creates an immutable array from the current contents of the builder's array. + The builder to create the immutable array from. + The type of elements contained in the immutable array. + An immutable array that contains the current contents of the builder's array. + + + Represents an array that is immutable; meaning it cannot be changed once it is created. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of element stored by the array. + + + Gets an empty immutable array. + + + Returns a copy of the original array with the specified item added to the end. + The item to be added to the end of the array. + A new array with the specified item added to the end. + + + Returns a copy of the original array with the specified elements added to the end of the array. + The elements to add to the array. + A new array with the elements added. + + + Returns a copy of the original array with the specified elements added to the end of the array. + The elements to add to the array. + A new array with the elements added. + + + Returns a new immutable array that contains the elements of this array cast to a different type. + The type of array element to return. + An immutable array that contains the elements of this array, cast to a different type. If the cast fails, returns an array whose property returns . + + + Creates a new read-only memory region over this immutable array. + The read-only memory representation of this immutable array. + + + Creates a new read-only span over this immutable array. + The read-only span representation of this immutable array. + + + Initializes a new instance of the struct by casting the underlying array to an array of type . + The type of array element to return. + Thrown if the cast is illegal. + An immutable array instance with elements cast to the new type. + + + Initializes a new instance of the struct based on the contents of an existing instance, allowing a covariant static cast to efficiently reuse the existing array. + The array to initialize the array with. No copy is made. + The type of array element to return. + An immutable array instance with elements cast to the new type. + + + Returns an array with all the elements removed. + An array with all of the elements removed. + + + Determines whether the specified item exists in the array. + The item to search for. + + if the specified item was found in the array; otherwise . + + + Copies the contents of this array to the specified array. + The array to copy to. + + + Copies the contents of this array to the specified array starting at the specified destination index. + The array to copy to. + The index in where copying begins. + + + Copies the specified items in this array to the specified array at the specified starting index. + The index of this array where copying begins. + The array to copy to. + The index in where copying begins. + The number of elements to copy from this array. + + + Indicates whether specified array is equal to this array. + An object to compare with this object. + + if is equal to this array; otherwise, . + + + Determines if this array is equal to the specified object. + The to compare with this array. + + if this array is equal to ; otherwise, . + + + Returns an enumerator that iterates through the contents of the array. + An enumerator. + + + Returns a hash code for this instance. + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + Searches the array for the specified item. + The item to search for. + The zero-based index position of the item if it is found, or -1 if it is not. + + + Searches the array for the specified item. + The item to search for. + The index at which to begin the search. + The zero-based index position of the item if it is found, or -1 if it is not. + + + Searches the array for the specified item. + The item to search for. + The index at which to begin the search. + The equality comparer to use in the search. + The zero-based index position of the item if it is found, or -1 if it is not. + + + Searches the array for the specified item. + The item to search for. + The index at which to begin the search. + The number of elements to search. + The zero-based index position of the item if it is found, or -1 if it is not. + + + Searches the array for the specified item. + The item to search for. + The index at which to begin the search. + The number of elements to search. + The equality comparer to use in the search. + The zero-based index position of the item if it is found, or -1 if it is not. + + + Returns a new array with the specified value inserted at the specified position. + The 0-based index into the array at which the new item should be added. + The item to insert at the start of the array. + A new array with the item inserted at the specified index. + + + Inserts the specified values at the specified index. + The index at which to insert the value. + The elements to insert. + A new immutable array with the items inserted at the specified index. + + + Inserts the specified values at the specified index. + The index at which to insert the value. + The elements to insert. + A new immutable array with the items inserted at the specified index. + + + Gets a read-only reference to the element at the specified in the read-only list. + The zero-based index of the element to get a reference to. + A read-only reference to the element at the specified in the read-only list. + + + Searches the array for the specified item; starting at the end of the array. + The item to search for. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Searches the array for the specified item; starting at the end of the array. + The item to search for. + The index at which to begin the search. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Searches the array for the specified item; starting at the end of the array. + The item to search for. + The index at which to begin the search. + The number of elements to search. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Searches the array for the specified item; starting at the end of the array. + The item to search for. + The index at which to begin the search. + The number of elements to search. + The equality comparer to use in the search. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Filters the elements of this array to those assignable to the specified type. + The type to filter the elements of the sequence on. + An that contains elements from the input sequence of type of . + + + Returns a value that indicates if two arrays are equal. + The array to the left of the operator. + The array to the right of the operator. + + if the arrays are equal; otherwise, . + + + Returns a value that indicates if two arrays are equal. + The array to the left of the operator. + The array to the right of the operator. + + if the arrays are equal; otherwise, . + + + Returns a value that indicates whether two arrays are not equal. + The array to the left of the operator. + The array to the right of the operator. + + if the arrays are not equal; otherwise, . + + + Checks for inequality between two array. + The object to the left of the operator. + The object to the right of the operator. + + if the two arrays are not equal; otherwise, . + + + Returns an array with the first occurrence of the specified element removed from the array. If no match is found, the current array is returned. + The item to remove. + A new array with the item removed. + + + Returns an array with the first occurrence of the specified element removed from the array. + + If no match is found, the current array is returned. + The item to remove. + The equality comparer to use in the search. + A new array with the specified item removed. + + + Removes all the items from the array that meet the specified condition. + The delegate that defines the conditions of the elements to remove. + A new array with items that meet the specified condition removed. + + + Returns an array with the element at the specified position removed. + The 0-based index of the element to remove from the returned array. + A new array with the item at the specified index removed. + + + Removes the specified items from this array. + The items to remove if matches are found in this list. + A new array with the elements removed. + + + Removes the specified items from this array. + The items to remove if matches are found in this list. + The equality comparer to use in the search. + A new array with the elements removed. + + + Removes the specified values from this list. + The items to remove if matches are found in this list. + A new list with the elements removed. + + + Removes the specified items from this list. + The items to remove if matches are found in this list. + The equality comparer to use in the search. + A new array with the elements removed. + + + Returns an array with the elements at the specified position removed. + The 0-based index of the starting element to remove from the array. + The number of elements to remove from the array. + The new array with the specified elements removed. + + + Finds the first element in the array equal to the specified value and replaces the value with the specified new value. + The value to find and replace in the array. + The value to replace the oldvalue with. + + is not found in the array. + A new array that contains even if the new and old values are the same. + + + Finds the first element in the array equal to the specified value and replaces the value with the specified new value. + The value to find and replace in the array. + The value to replace the oldvalue with. + The equality comparer to use to compare values. + + is not found in the array. + A new array that contains even if the new and old values are the same. + + + Replaces the item at the specified index with the specified item. + The index of the item to replace. + The item to add to the list. + The new array that contains at the specified index. + + + Sorts the elements in the immutable array using the default comparer. + A new immutable array that contains the items in this array, in sorted order. + + + Sorts the elements in the immutable array using the specified comparer. + The implementation to use when comparing elements, or to use the default comparer + A new immutable array that contains the items in this array, in sorted order. + + + Sorts the elements in the entire using the specified . + The to use when comparing elements. + + is null. + The sorted list. + + + Sorts the specified elements in the immutable array using the specified comparer. + The index of the first element to sort. + The number of elements to include in the sort. + The implementation to use when comparing elements, or to use the default comparer + A new immutable array that contains the items in this array, in sorted order. + + + Throws in all cases. + The item to add to the end of the array. + + + Throws in all cases. + + + Throws in all cases. + The object to remove from the array. + Throws in all cases. + + + Returns an enumerator that iterates through the array. + The property returns . + An enumerator that can be used to iterate through the array. + + + Throws in all cases. + The index of the location to insert the item. + The item to insert. + + + Throws in all cases. + The index. + + + Copies this array to another array starting at the specified index. + The array to copy this array to. + The index in the destination array to start the copy operation. + + + Returns an enumerator that iterates through the immutable array. + The property returns . + An enumerator that iterates through the immutable array. + + + Throws in all cases. + The value to add to the array. + Thrown in all cases. + Throws in all cases. + + + Throws in all cases. + Thrown in all cases. + + + Throws in all cases. + The value to check for. + Throws in all cases. + + + Gets the value at the specified index. + The value to return the index of. + The value of the element at the specified index. + + + Throws in all cases. + Index that indicates where to insert the item. + The value to insert. + Thrown in all cases. + + + Throws in all cases. + The value to remove from the array. + Thrown in all cases. + + + Throws in all cases. + The index of the item to remove. + Thrown in all cases. + + + Returns a copy of the original array with the specified item added to the end. + The value to add to the end of the array. + A new array with the specified item added to the end. + + + Returns a copy of the original array with the specified elements added to the end of the array. + The elements to add to the end of the array. + A new array with the elements added to the end. + + + Returns an array with all the elements removed. + An array with all the elements removed. + + + Returns a new array with the specified value inserted at the specified position. + The 0-based index into the array at which the new item should be added. + The item to insert at the start of the array. + A new array with the specified value inserted. + + + Inserts the specified values at the specified index. + The index at which to insert the value. + The elements to insert. + A new array with the specified values inserted. + + + Returns an array with the first occurrence of the specified element removed from the array; if no match is found, the current array is returned. + The value to remove from the array. + The equality comparer to use in the search. + A new array with the value removed. + + + Removes all the items from the array that meet the specified condition. + The delegate that defines the conditions of the elements to remove. + A new array with items that meet the specified condition removed. + + + Returns an array with the element at the specified position removed. + The 0-based index of the element to remove from the returned array. + A new array with the specified item removed. + + + Removes the specified items from this array. + The items to remove if matches are found in this list. + The equality comparer to use in the search. + A new array with the elements removed. + + + Returns an array with the elements at the specified position removed. + The 0-based index of the starting element to remove from the array. + The number of elements to remove from the array. + The new array with the specified elements removed. + + + Finds the first element in the array equal to the specified value and replaces the value with the specified new value. + The value to find and replace in the array. + The value to replace the oldvalue with. + The equality comparer to use to compare values. + + is not found in the array. + A new array that contains even if the new and old values are the same. + + + Replaces the item at the specified index with the specified item. + The index of the item to replace. + The value to add to the list. + The new array that contains at the specified index. + + + Determines whether the current collection element precedes, occurs in the same position as, or follows another element in the sort order. + The element to compare with the current instance. + The object used to compare members of the current array with the corresponding members of other array. + The arrays are not the same length. + An integer that indicates whether the current element precedes, is in the same position or follows the other element. + + + Determines whether this array is structurally equal to the specified array. + The array to compare with the current instance. + An object that determines whether the current instance and other are structurally equal. + + if the two arrays are structurally equal; otherwise, . + + + Returns a hash code for the current instance. + An object that computes the hash code of the current object. + The hash code for the current instance. + + + Creates a mutable array that has the same contents as this array and can be efficiently mutated across multiple operations using standard mutable interfaces. + The new builder with the same contents as this array. + + + Gets a value indicating whether this array was declared but not initialized. + + if the is ; otherwise, . + + + Gets a value indicating whether this is empty or is not initialized. + + if the is or ; otherwise, . + + + Gets a value indicating whether this is empty. + + if the is empty; otherwise, . + + + Gets the element at the specified index in the immutable array. + The zero-based index of the element to get. + The element at the specified index in the immutable array. + + + Gets the number of elements in the array. + The number of elements in the array + + + Gets the number of items in the collection. + Thrown if the property returns true. + Number of items in the collection. + + + Gets a value indicating whether this instance is read only. + + if this instance is read only; otherwise, . + + + Gets or sets the element at the specified index in the read-only list. + The zero-based index of the element to get. + Always thrown from the setter. + Thrown if the property returns true. + The element at the specified index in the read-only list. + + + Gets the number of items in the collection. + Thrown if the property returns true. + The number of items in the collection. + + + Gets the element at the specified index. + The index. + Thrown if the property returns true. + The element. + + + Gets the size of the array. + Thrown if the property returns true. + The number of items in the collection. + + + See the interface. Always returns since since immutable collections are thread-safe. + Boolean value determining whether the collection is thread-safe. + + + Gets the sync root. + An object for synchronizing access to the collection. + + + Gets a value indicating whether this instance is fixed size. + + if this instance is fixed size; otherwise, . + + + Gets a value indicating whether this instance is read only. + + if this instance is read only; otherwise, . + + + Gets or sets the at the specified index. + The index. + Always thrown from the setter. + Thrown if the property returns true. + The object at the specified index. + + + A writable array accessor that can be converted into an instance without allocating extra memory. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Adds the specified item to the array. + The object to add to the array. + + + Adds the specified items to the end of the array. + The items to add to the array. + + + Adds the specified items to the end of the array. + The items to add to the array. + The number of elements from the source array to add. + + + Adds the specified items to the end of the array. + The items to add to the array. + + + Adds the specified items to the end of the array. + The items to add to the array. + + + Adds the specified items to the end of the array. + The items to add to the array. + + + Adds the specified items to the end of the array. + The items to add to the array. + The number of elements from the source array to add. + + + Adds the specified items that derive from the type currently in the array, to the end of the array. + The items to add to end of the array. + The type that derives from the type of item already in the array. + + + Adds the specified items that derive from the type currently in the array, to the end of the array. + The items to add to the end of the array. + The type that derives from the type of item already in the array. + + + Adds the specified items that derive from the type currently in the array, to the end of the array. + The items to add to the end of the array. + The type that derives from the type of item already in the array. + + + Removes all items from the array. + + + Determines whether the array contains a specific value. + The object to locate in the array. + + if the object is found; otherwise, . + + + Copies the current contents to the specified array. + The array to copy to. + The index to start the copy operation. + + + Gets an object that can be used to iterate through the collection. + An object that can be used to iterate through the collection. + + + Determines the index of a specific item in the array. + The item to locate in the array. + The index of if it's found in the list; otherwise, -1. + + + Determines the index of the specified item. + The item to locate in the array. + The starting position of the search. + The index of if it's found in the list; otherwise, -1. + + + Determines the index of the specified item. + The item to locate in the array. + The starting position of the search. + The number of elements to search. + The index of if it's found in the list; otherwise, -1. + + + Determines the index for the specified item. + The item to locate in the array. + The index at which to begin the search. + The starting position of the search. + The equality comparer to use in the search + The index of if it's found in the list; otherwise, -1. + + + Inserts an item in the array at the specified index. + The zero-based index at which to insert the item. + The object to insert into the array. + + + Gets a read-only reference to the element at the specified index. + The item index. + + is greater or equal to the array count. + The read-only reference to the element at the specified index. + + + Determines the 0-based index of the last occurrence of the specified item in this array. + The item to search for. + The 0-based index where the item was found; or -1 if it could not be found. + + + Determines the 0-based index of the last occurrence of the specified item in this array. + The item to search for. + The starting position of the search. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Determines the 0-based index of the last occurrence of the specified item in this array. + The item to search for. + The starting position of the search. + The number of elements to search. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Determines the 0-based index of the last occurrence of the specified item in this array. + The item to search for. + The starting position of the search. + The number of elements to search. + The equality comparer to use in the search. + The 0-based index into the array where the item was found; or -1 if it could not be found. + + + Extracts the internal array as an and replaces it with a zero length array. + When doesn't equal . + An immutable array containing the elements of the builder. + + + Removes the specified element. + The item to remove. + + if was found and removed; otherwise, . + + + Removes the item at the specified index from the array. + The zero-based index of the item to remove. + + + Reverses the order of elements in the collection. + + + Sorts the contents of the array. + + + Sorts the contents of the array. + The comparer to use for sorting. If comparer is , the default comparer for the elements type in the array is used. + + + Sorts the elements in the entire array using the specified . + The to use when comparing elements. + + is null. + + + Sorts the contents of the array. + The starting index for the sort. + The number of elements to include in the sort. + The comparer to use for sorting. If comparer is , the default comparer for the elements type in the array is used. + + + Returns an enumerator that iterates through the array. + An enumerator that iterates through the array. + + + Returns an enumerator that iterates through the array. + An enumerator that iterates through the array. + + + Creates a new array with the current contents of this . + A new array with the contents of this . + + + Returns an immutable array that contains the current contents of this . + An immutable array that contains the current contents of this . + + + Gets or sets the length of the internal array. When set, the internal array is reallocated to the given capacity if it is not already the specified length. + The length of the internal array. + + + Gets or sets the number of items in the array. + The number of items in the array. + + + Gets or sets the item at the specified index. + The index of the item to get or set. + The specified index is not in the array. + The item at the specified index. + + + Gets a value that indicates whether the is read-only. + + if the is read-only; otherwise, . + + + An array enumerator. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Advances to the next value in the array. + + if another item exists in the array; otherwise, . + + + Gets the current item. + The current item. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Determines whether the specified immutable dictionary contains the specified key/value pair. + The immutable dictionary to search. + The key to locate in the immutable dictionary. + The value to locate on the specified key, if the key is found. + The type of the keys in the immutable dictionary. + The type of the values in the immutable dictionary. + + if this map contains the specified key/value pair; otherwise, . + + + Creates an empty immutable dictionary. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + An empty immutable dictionary. + + + Creates an empty immutable dictionary that uses the specified key comparer. + The implementation to use to determine the equality of keys in the dictionary. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + An empty immutable dictionary. + + + Creates an empty immutable dictionary that uses the specified key and value comparers. + The implementation to use to determine the equality of keys in the dictionary. + The implementation to use to determine the equality of values in the dictionary. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + An empty immutable dictionary. + + + Creates a new immutable dictionary builder. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + The new builder. + + + Creates a new immutable dictionary builder. + The key comparer. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + The new builder. + + + Creates a new immutable dictionary builder. + The key comparer. + The value comparer. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + The new builder. + + + Creates a new immutable dictionary that contains the specified items. + The items used to populate the dictionary before it's immutable. + The type of keys in the dictionary. + The type of values in the dictionary. + A new immutable dictionary that contains the specified items. + + + Creates a new immutable dictionary that contains the specified items and uses the specified key comparer. + The comparer implementation to use to compare keys for equality. + The items to add to the dictionary before it's immutable. + The type of keys in the dictionary. + The type of values in the dictionary. + A new immutable dictionary that contains the specified items and uses the specified comparer. + + + Creates a new immutable dictionary that contains the specified items and uses the specified key comparer. + The comparer implementation to use to compare keys for equality. + The comparer implementation to use to compare values for equality. + The items to add to the dictionary before it's immutable. + The type of keys in the dictionary. + The type of values in the dictionary. + A new immutable dictionary that contains the specified items and uses the specified comparer. + + + Gets the value for a given key if a matching key exists in the dictionary. + The dictionary to retrieve the value from. + The key to search for. + The type of the key. + The type of the value. + The value for the key, or default(TValue) if no matching key was found. + + + Gets the value for a given key if a matching key exists in the dictionary. + The dictionary to retrieve the value from. + The key to search for. + The default value to return if no matching key is found in the dictionary. + The type of the key. + The type of the value. + The value for the key, or if no matching key was found. + + + Constructs an immutable dictionary from an existing collection of elements, applying a transformation function to the source keys. + The source collection used to generate the immutable dictionary. + The function used to transform keys for the immutable dictionary. + The type of element in the source collection. + The type of key in the resulting immutable dictionary. + The immutable dictionary that contains elements from , with keys transformed by applying . + + + Constructs an immutable dictionary based on some transformation of a sequence. + The source collection used to generate the immutable dictionary. + The function used to transform keys for the immutable dictionary. + The key comparer to use for the dictionary. + The type of element in the source collection. + The type of key in the resulting immutable dictionary. + The immutable dictionary that contains elements from , with keys transformed by applying . + + + Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents. + The sequence of key/value pairs to enumerate. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable dictionary that contains the key/value pairs in the specified sequence. + + + Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents by using the specified key comparer. + The sequence of key/value pairs to enumerate. + The key comparer to use when building the immutable dictionary. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable dictionary that contains the key/value pairs in the specified sequence. + + + Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents by using the specified key and value comparers. + The sequence of key/value pairs to enumerate. + The key comparer to use when building the immutable dictionary. + The value comparer to use for the immutable dictionary. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable dictionary that contains the key/value pairs in the specified sequence. + + + Creates an immutable dictionary from the current contents of the builder's dictionary. + The builder to create the immutable dictionary from. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable dictionary that contains the current contents in the builder's dictionary. + + + Enumerates and transforms a sequence, and produces an immutable dictionary of its contents. + The sequence to enumerate to generate the dictionary. + The function that will produce the key for the dictionary from each sequence element. + The function that will produce the value for the dictionary from each sequence element. + The type of the elements in the sequence. + The type of the keys in the resulting dictionary. + The type of the values in the resulting dictionary. + An immutable dictionary that contains the items in the specified sequence. + + + Enumerates and transforms a sequence, and produces an immutable dictionary of its contents by using the specified key comparer. + The sequence to enumerate to generate the dictionary. + The function that will produce the key for the dictionary from each sequence element. + The function that will produce the value for the dictionary from each sequence element. + The key comparer to use for the dictionary. + The type of the elements in the sequence. + The type of the keys in the resulting dictionary. + The type of the values in the resulting dictionary. + An immutable dictionary that contains the items in the specified sequence. + + + Enumerates and transforms a sequence, and produces an immutable dictionary of its contents by using the specified key and value comparers. + The sequence to enumerate to generate the dictionary. + The function that will produce the key for the dictionary from each sequence element. + The function that will produce the value for the dictionary from each sequence element. + The key comparer to use for the dictionary. + The value comparer to use for the dictionary. + The type of the elements in the sequence. + The type of the keys in the resulting dictionary. + The type of the values in the resulting dictionary. + An immutable dictionary that contains the items in the specified sequence. + + + Represents an immutable, unordered collection of keys and values. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of the keys in the dictionary. + The type of the values in the dictionary. + + + Gets an empty immutable dictionary. + + + Adds an element with the specified key and value to the immutable dictionary. + The key of the element to add. + The value of the element to add. + The given key already exists in the dictionary but has a different value. + A new immutable dictionary that contains the additional key/value pair. + + + Adds the specified key/value pairs to the immutable dictionary. + The key/value pairs to add. + One of the given keys already exists in the dictionary but has a different value. + A new immutable dictionary that contains the additional key/value pairs. + + + Retrieves an empty immutable dictionary that has the same ordering and key/value comparison rules as this dictionary instance. + An empty dictionary with equivalent ordering and key/value comparison rules. + + + Determines whether this immutable dictionary contains the specified key/value pair. + The key/value pair to locate. + + if the specified key/value pair is found in the dictionary; otherwise, . + + + Determines whether the immutable dictionary contains an element with the specified key. + The key to locate. + + if the immutable dictionary contains an element with the specified key; otherwise, . + + + Determines whether the immutable dictionary contains an element with the specified value. + The value to locate. The value can be for reference types. + + if the dictionary contains an element with the specified value; otherwise, . + + + Returns an enumerator that iterates through the immutable dictionary. + An enumerator that can be used to iterate through the dictionary. + + + Removes the element with the specified key from the immutable dictionary. + The key of the element to remove. + A new immutable dictionary with the specified element removed; or this instance if the specified key cannot be found in the dictionary. + + + Removes the elements with the specified keys from the immutable dictionary. + The keys of the elements to remove. + A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. + + + Sets the specified key and value in the immutable dictionary, possibly overwriting an existing value for the key. + The key of the entry to add. + The key value to set. + A new immutable dictionary that contains the specified key/value pair. + + + Sets the specified key/value pairs in the immutable dictionary, possibly overwriting existing values for the keys. + The key/value pairs to set in the dictionary. If any of the keys already exist in the dictionary, this method will overwrite their previous values. + A new immutable dictionary that contains the specified key/value pairs. + + + Adds an item to the . + The object to add to the . + + + Removes all items from the . + + + Copies the elements of the to an , starting at a particular index. + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + + Removes the first occurrence of a specific object from the . + The object to remove from the . + + if was successfully removed from the ; otherwise, . This method also returns if is not found in the original . + + + Adds an element with the provided key and value to the immutable dictionary. + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + is . + An element with the same key already exists in the . + The is read-only. + + + Removes the element with the specified key from the generic dictionary. + The key of the element to remove. + + is . + The is read-only. + + if the element is successfully removed; otherwise, . This method also returns if was not found in the original generic dictionary. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Copies the elements of the dictionary to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Adds an element with the provided key and value to the immutable dictionary object. + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + + Clears this instance. + The dictionary object is read-only. + + + Determines whether the immutable dictionary object contains an element with the specified key. + The key to locate in the dictionary object. + + if the dictionary contains an element with the key; otherwise, . + + + Returns an object for the immutable dictionary object. + An enumerator object for the dictionary object. + + + Removes the element with the specified key from the immutable dictionary object. + The key of the element to remove. + + + Returns an enumerator that iterates through a collection. + An enumerator object that can be used to iterate through the collection. + + + See the interface + Key of the entry to be added. + Value of the entry to be added. + A new immutable dictionary that contains the additional key/value pair. + + + See the interface + Sequence of key/value pairs to be added to the dictionary. + A new immutable dictionary that contains the additional key/value pairs. + + + Retrieves an empty dictionary that has the same ordering and key-value comparison rules as this dictionary instance. + The immutable dictionary instance. + + + See the interface + Key of the entry to be removed. + A new immutable dictionary with the specified element removed; or this instance if the specified key cannot be found in the dictionary. + + + See the interface + Sequence of keys to be removed. + A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. + + + See the interface + Key of entry to be added. + Value of the entry to be added. + A new immutable dictionary that contains the specified key/value pair. + + + Applies a given set of key-value pairs to an immutable dictionary, replacing any conflicting keys in the resulting dictionary. + The key-value pairs to set on the map. Any keys that conflict with existing keys will replace the previous values. + A copy of the immutable dictionary with updated key-value pairs. + + + Creates an immutable dictionary with the same contents as this dictionary that can be efficiently mutated across multiple operations by using standard mutable interfaces. + A collection with the same contents as this dictionary that can be efficiently mutated across multiple operations by using standard mutable interfaces. + + + Determines whether this dictionary contains a specified key. + The key to search for. + The matching key located in the dictionary if found, or equalkey if no match is found. + + if a match for is found; otherwise, . + + + Gets the value associated with the specified key. + The key whose value will be retrieved. + When this method returns, contains the value associated with the specified key, if the key is found; otherwise, contains the default value for the type of the parameter. This parameter is passed uninitialized. + + is null. + + if the object that implements the dictionary contains an element with the specified key; otherwise, . + + + Gets an instance of the immutable dictionary that uses the specified key comparer. + The key comparer to use. + An instance of the immutable dictionary that uses the given comparer. + + + Gets an instance of the immutable dictionary that uses the specified key and value comparers. + The key comparer to use. + The value comparer to use. + An instance of the immutable dictionary that uses the given comparers. + + + Gets the number of key/value pairs in the immutable dictionary. + The number of key/value pairs in the dictionary. + + + Gets a value that indicates whether this instance of the immutable dictionary is empty. + + if this instance is empty; otherwise, . + + + Gets the associated with the specified key. + The type of the key. + The value associated with the specified key. If no results are found, the operation throws an exception. + + + Gets the key comparer for the immutable dictionary. + The key comparer. + + + Gets the keys in the immutable dictionary. + The keys in the immutable dictionary. + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the with the specified key. + The type of the key. + An object of type associated with the . + + + Gets the keys. + A collection containing the keys. + + + Gets the values. + A collection containing the values. + + + Gets a value indicating whether access to the is synchronized (thread safe). + + if access to the is synchronized (thread safe); otherwise, . + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Gets a value indicating whether the object has a fixed size. + + if the object has a fixed size; otherwise, . + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the element with the specified key. + The key. + The value stored under the specified key. + + + Gets an containing the keys of the . + An containing the keys of the object that implements . + + + Gets an containing the values in the . + An containing the values in the object that implements . + + + Gets the value comparer used to determine whether values are equal. + The value comparer used to determine whether values are equal. + + + Gets the values in the immutable dictionary. + The values in the immutable dictionary. + + + Represents a hash map that mutates with little or no memory allocations and that can produce or build on immutable hash map instances very efficiently. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + + Adds an element that has the specified key and value to the immutable dictionary. + The key of the element to add. + The value of the element to add. + + is null. + An element with the same key already exists in the dictionary. + The dictionary is read-only. + + + Adds the specified item to the immutable dictionary. + The object to add to the dictionary. + The dictionary is read-only. + + + Adds a sequence of values to this collection. + The items to add to this collection. + + + Removes all items from the immutable dictionary. + The dictionary is read-only. + + + Determines whether the immutable dictionary contains a specific value. + The object to locate in the dictionary. + + if is found in the dictionary; otherwise, . + + + Determines whether the immutable dictionary contains an element that has the specified key. + The key to locate in the dictionary. + + is null. + + if the dictionary contains an element with the key; otherwise, . + + + Determines whether the immutable dictionary contains an element that has the specified value. + The value to locate in the immutable dictionary. The value can be for reference types. + + if the dictionary contains an element with the specified value; otherwise, . + + + Returns an enumerator that iterates through the immutable dictionary. + An enumerator that can be used to iterate through the collection. + + + Gets the value for a given key if a matching key exists in the dictionary. + The key to search for. + The value for the key, or default(TValue) if no matching key was found. + + + Gets the value for a given key if a matching key exists in the dictionary. + The key to search for. + The default value to return if no matching key is found in the dictionary. + The value for the key, or if no matching key was found. + + + Removes the element with the specified key from the immutable dictionary. + The key of the element to remove. + + is null. + The dictionary is read-only. + + if the element is successfully removed; otherwise, . This method also returns if was not found in the dictionary. + + + Removes the first occurrence of a specific object from the immutable dictionary. + The object to remove from the dictionary. + The dictionary is read-only. + + if was successfully removed from the dictionary; otherwise, . This method also returns false if is not found in the dictionary. + + + Removes any entries with keys that match those found in the specified sequence from the immutable dictionary. + The keys for entries to remove from the dictionary. + + + Copies the elements of the dictionary to an array of type , starting at the specified array index. + The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Copies the elements of the dictionary to an array of type , starting at the specified array index. + The one-dimensional array of type that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Adds an element with the provided key and value to the dictionary object. + The key of the element to add. + The value of the element to add. + + + Determines whether the dictionary object contains an element with the specified key. + The key to locate. + + if the dictionary contains an element with the key; otherwise, . + + + Returns an object for the dictionary. + + An object for the dictionary. + + + Removes the element with the specified key from the dictionary. + The key of the element to remove. + + + Returns an enumerator that iterates through a collection. + An enumerator object that can be used to iterate through the collection. + + + Creates an immutable dictionary based on the contents of this instance. + An immutable dictionary. + + + Determines whether this dictionary contains a specified key. + The key to search for. + The matching key located in the dictionary if found, or equalkey if no match is found. + + if a match for is found; otherwise, . + + + Returns the value associated with the specified key. + The key whose value will be retrieved. + When this method returns, contains the value associated with the specified key, if the key is found; otherwise, returns the default value for the type of the parameter. This parameter is passed uninitialized. + + is null. + + if the object that implements the immutable dictionary contains an element with the specified key; otherwise, . + + + Gets the number of elements contained in the immutable dictionary. + The number of elements contained in the immutable dictionary. + + + Gets or sets the element with the specified key. + The element to get or set. + + is . + The property is being retrieved, and is not found. + The property is being set, and the is read-only. + The element that has the specified key. + + + Gets or sets the key comparer. + The key comparer. + + + Gets a collection that contains the keys of the immutable dictionary. + A collection that contains the keys of the object that implements the immutable dictionary. + + + Gets a value that indicates whether the collection is read-only. + + if the collection is read-only; otherwise, . + + + Gets a collection containing the keys of the generic dictionary. + A collection containing the keys of the object that implements the generic dictionary. + + + Gets a collection containing the values in the generic dictionary. + A collection containing the values in the object that implements the generic dictionary. + + + Gets a value that indicates whether access to the is synchronized (thread safe). + + if access to the is synchronized (thread safe); otherwise, . + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Gets a value that indicates whether the object has a fixed size. + + if the object has a fixed size; otherwise, . + + + Gets a value that indicates whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the element with the specified key. + The key. + Value stored under specified key. + + + Gets an containing the keys of the . + An containing the keys of the object that implements . + + + Gets an containing the values in the . + An containing the values in the object that implements . + + + Gets or sets the value comparer. + The value comparer. + + + Gets a collection that contains the values of the immutable dictionary. + A collection that contains the values of the object that implements the dictionary. + + + Enumerates the contents of the immutable dictionary without allocating any memory. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + + Releases the resources used by the current instance of the class. + + + Advances the enumerator to the next element of the immutable dictionary. + The dictionary was modified after the enumerator was created. + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the dictionary. + + + Sets the enumerator to its initial position, which is before the first element in the dictionary. + The dictionary was modified after the enumerator was created. + + + Gets the element at the current position of the enumerator. + The element in the dictionary at the current position of the enumerator. + + + Gets the current element. + Current element in enumeration. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Creates an empty immutable hash set. + The type of items to be stored in the immutable hash set. + An empty immutable hash set. + + + Creates a new immutable hash set that contains the specified item. + The item to prepopulate the hash set with. + The type of items in the immutable hash set. + A new immutable hash set that contains the specified item. + + + Creates a new immutable hash set that contains the specified array of items. + An array that contains the items to prepopulate the hash set with. + The type of items in the immutable hash set. + A new immutable hash set that contains the specified items. + + + Creates an empty immutable hash set that uses the specified equality comparer. + The object to use for comparing objects in the set for equality. + The type of items in the immutable hash set. + An empty immutable hash set. + + + Creates a new immutable hash set that contains the specified item and uses the specified equality comparer for the set type. + The object to use for comparing objects in the set for equality. + The item to prepopulate the hash set with. + The type of items in the immutable hash set. + A new immutable hash set that contains the specified item. + + + Creates a new immutable hash set that contains the items in the specified collection and uses the specified equality comparer for the set type. + The object to use for comparing objects in the set for equality. + An array that contains the items to prepopulate the hash set with. + The type of items stored in the immutable hash set. + A new immutable hash set that contains the specified items. + + + Creates a new immutable hash set builder. + The type of items stored by the collection. + The immutable hash set builder. + + + Creates a new immutable hash set builder. + The object to use for comparing objects in the set for equality. + The type of items stored by the collection. + The new immutable hash set builder. + + + Creates a new immutable hash set prefilled with the specified items. + The items to add to the hash set. + The type of items stored by the collection. + The new immutable hash set that contains the specified items. + + + Creates a new immutable hash set that contains the specified items and uses the specified equality comparer for the set type. + The object to use for comparing objects in the set for equality. + The items add to the collection before immutability is applied. + The type of items stored in the collection. + The new immutable hash set. + + + Enumerates a sequence and produces an immutable hash set of its contents. + The sequence to enumerate. + The type of the elements in the sequence. + An immutable hash set that contains the items in the specified sequence. + + + Enumerates a sequence, produces an immutable hash set of its contents, and uses the specified equality comparer for the set type. + The sequence to enumerate. + The object to use for comparing objects in the set for equality. + The type of the elements in the sequence. + An immutable hash set that contains the items in the specified sequence and uses the specified equality comparer. + + + Creates an immutable hash set from the current contents of the builder's set. + The builder to create the immutable hash set from. + The type of the elements in the hash set. + An immutable hash set that contains the current contents in the builder's set. + + + Represents an immutable, unordered hash set. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the hash set. + + + Gets an immutable hash set for this type that uses the default . + + + Adds the specified element to the hash set. + The element to add to the set. + A hash set that contains the added value and any values previously held by the object. + + + Retrieves an empty immutable hash set that has the same sorting and ordering semantics as this instance. + An empty hash set that has the same sorting and ordering semantics as this instance. + + + Determines whether this immutable hash set contains the specified element. + The object to locate in the immutable hash set. + + if is found in the ; otherwise, . + + + Removes the elements in the specified collection from the current immutable hash set. + The collection of items to remove from this set. + A new set with the items removed; or the original set if none of the items were in the set. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Creates an immutable hash set that contains elements that exist in both this set and the specified set. + The collection to compare to the current set. + A new immutable set that contains any elements that exist in both sets. + + + Determines whether the current immutable hash set is a proper (strict) subset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper subset of the specified collection; otherwise, . + + + Determines whether the current immutable hash set is a proper (strict) superset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper superset of the specified collection; otherwise, . + + + Determines whether the current immutable hash set is a subset of a specified collection. + The collection to compare to the current set. + + if the current set is a subset of the specified collection; otherwise, . + + + Determines whether the current immutable hash set is a superset of a specified collection. + The collection to compare to the current set. + + if the current set is a superset of the specified collection; otherwise, . + + + Determines whether the current immutable hash set overlaps with the specified collection. + The collection to compare to the current set. + + if the current set and the specified collection share at least one common element; otherwise, . + + + Removes the specified element from this immutable hash set. + The element to remove. + A new set with the specified element removed, or the current set if the element cannot be found in the set. + + + Determines whether the current immutable hash set and the specified collection contain the same elements. + The collection to compare to the current set. + + if the sets are equal; otherwise, . + + + Creates an immutable hash set that contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + A new set that contains the elements that are present only in the current set or in the specified collection, but not both. + + + Adds an item to the set. + The object to add to the set. + The set is read-only. + + + Removes all items from this set. + The set is read-only. + + + Copies the elements of the set to an array, starting at a particular index. + The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Removes the first occurrence of a specific object from the set. + The object to remove from the set. + + if the element is successfully removed; otherwise, . + + + Returns an enumerator that iterates through the collection. + An enumerator that iterates through the collection. + + + Adds an element to the current set and returns a value that indicates whether the element was successfully added. + The element to add to the collection. + + if the element is added to the set; if the element is already in the set. + + + Removes all elements in the specified collection from the current set. + The collection of items to remove. + + + Modifies the current set so that it contains only elements that are also in a specified collection. + The collection to compare to the current collection. + + + Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + + + Modifies the current set so that it contains all elements that are present in either the current set or in the specified collection. + The collection to compare to the current set. + + + Copies the elements of the set to an array, starting at a particular index. + The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through a set. + An enumerator that can be used to iterate through the set. + + + Adds the specified element to this immutable set. + The element to add. + A new set with the element added, or this set if the element is already in the set. + + + Retrieves an empty set that has the same sorting and ordering semantics as this instance. + An empty set that has the same sorting or ordering semantics as this instance. + + + Removes the elements in the specified collection from the current set. + The collection of items to remove from this set. + A new set with the items removed; or the original set if none of the items were in the set. + + + Creates an immutable set that contains elements that exist in both this set and the specified set. + The collection to compare to the current set. + A new immutable set that contains any elements that exist in both sets. + + + Removes the specified element from this immutable set. + The element to remove. + A new set with the specified element removed, or the current set if the element cannot be found in the set. + + + Creates an immutable set that contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + A new set that contains the elements that are present only in the current set or in the specified collection, but not both. + + + Creates a new immutable set that contains all elements that are present in either the current set or in the specified collection. + The collection to add elements from. + A new immutable set with the items added; or the original set if all the items were already in the set. + + + Creates an immutable hash set that has the same contents as this set and can be efficiently mutated across multiple operations by using standard mutable interfaces. + A set with the same contents as this set that can be efficiently mutated across multiple operations by using standard mutable interfaces. + + + Searches the set for a given value and returns the equal value it finds, if any. + The value to search for. + The value from the set that the search found, or the original value if the search yielded no match. + A value indicating whether the search was successful. + + + Creates a new immutable hash set that contains all elements that are present in either the current set or in the specified collection. + The collection to add elements from. + A new immutable hash set with the items added; or the original set if all the items were already in the set. + + + Gets an instance of the immutable hash set that uses the specified equality comparer for its search methods. + The equality comparer to use. + An instance of this immutable hash set that uses the given comparer. + + + Gets the number of elements in the immutable hash set. + The number of elements in the hash set. + + + Gets a value that indicates whether the current immutable hash set is empty. + + if this instance is empty; otherwise, . + + + Gets the object that is used to obtain hash codes for the keys and to check the equality of values in the immutable hash set. + The comparer used to obtain hash codes for the keys and check equality. + + + See the interface. + + + See the interface. + + + See . + + + Represents a hash set that mutates with little or no memory allocations and that can produce or build on immutable hash set instances very efficiently. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Adds the specified item to the immutable hash set. + The item to add. + + if the item did not already belong to the collection; otherwise, . + + + Removes all items from the immutable hash set. + The hash set is read-only. + + + Determines whether the immutable hash set contains a specific value. + The object to locate in the hash set. + + if is found in the hash set ; otherwise, . + + + Removes all elements in the specified collection from the current hash set. + The collection of items to remove from the set. + + + Returns an enumerator that iterates through the immutable hash set. + An enumerator that can be used to iterate through the set. + + + Modifies the current set so that it contains only elements that are also in a specified collection. + The collection to compare to the current set. + + + Determines whether the current set is a proper (strict) subset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper subset of ; otherwise, . + + + Determines whether the current set is a proper (strict) superset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper superset of ; otherwise, . + + + Determines whether the current set is a subset of a specified collection. + The collection to compare to the current set. + + if the current set is a subset of ; otherwise, . + + + Determines whether the current set is a superset of a specified collection. + The collection to compare to the current set. + + if the current set is a superset of ; otherwise, . + + + Determines whether the current set overlaps with the specified collection. + The collection to compare to the current set. + + if the current set and share at least one common element; otherwise, . + + + Removes the first occurrence of a specific object from the immutable hash set. + The object to remove from the set. + The set is read-only. + + if was successfully removed from the set ; otherwise, . This method also returns if is not found in the original set. + + + Determines whether the current set and the specified collection contain the same elements. + The collection to compare to the current set. + + if the current set is equal to ; otherwise, . + + + Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + + + Adds an item to the hash set. + The object to add to the set. + The set is read-only. + + + Copies the elements of the hash set to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from the hash set. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Returns an enumerator that iterates through a collection. + An enumerator that can be used to iterate through the collection. + + + Creates an immutable hash set based on the contents of this instance. + An immutable set. + + + Searches the set for a given value and returns the equal value it finds, if any. + The value for which to search. + The value from the set that the search found, or the original value if the search yielded no match. + A value indicating whether the search was successful. + + + Modifies the current set so that it contains all elements that are present in both the current set and in the specified collection. + The collection to compare to the current set. + + + Gets the number of elements contained in the immutable hash set. + The number of elements contained in the immutable hash set. + + + Gets or sets the key comparer. + The key comparer. + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Enumerates the contents of the immutable hash set without allocating any memory. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Releases the resources used by the current instance of the class. + + + Advances the enumerator to the next element of the immutable hash set. + The hash set was modified after the enumerator was created. + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the hash set. + + + Sets the enumerator to its initial position, which is before the first element in the hash set. + The hash set was modified after the enumerator was created. + + + Gets the element at the current position of the enumerator. + The element at the current position of the enumerator. + + + Gets the current element. + + + Contains interlocked exchange mechanisms for immutable collections. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Obtains the value from a dictionary after having added it or updated an existing entry. + The variable or field to atomically update if the specified is not in the dictionary. + The key for the value to add or update. + The value to use if no previous value exists. + The function that receives the key and prior value and returns the new value with which to update the dictionary. + The type of key stored by the dictionary. + The type of value stored by the dictionary. + The added or updated value. + + + Obtains the value from a dictionary after having added it or updated an existing entry. + The variable or field to atomically update if the specified is not in the dictionary. + The key for the value to add or update. + The function that receives the key and returns a new value to add to the dictionary when no value previously exists. + The function that receives the key and prior value and returns the new value with which to update the dictionary. + The type of key stored by the dictionary. + The type of value stored by the dictionary. + The added or updated value. + + + Atomically enqueues an element to the end of a queue. + The variable or field to atomically update. + The value to enqueue. + The type of items contained in the collection + + + Gets the value for the specified key from the dictionary, or if the key was not found, adds a new value to the dictionary. + The variable or field to atomically update if the specified key is not in the dictionary. + The key for the value to get or add. + The value to add to the dictionary the key is not found. + The type of the keys contained in the collection. + The type of the values contained in the collection. + The value at the specified key or if the key was not present. + + + Gets the value for the specified key from the dictionary, or if the key was not found, adds a new value to the dictionary. + The variable or field to atomically update if the specified is not in the dictionary. + The key for the value to retrieve or add. + The function to execute to obtain the value to insert into the dictionary if the key is not found. This delegate will not be invoked more than once. + The type of the keys contained in the collection. + The type of the values contained in the collection. + The value at the specified key or if the key was not present. + + + Gets the value for the specified key from the dictionary, or if the key was not found, adds a new value to the dictionary. + The variable or field to update if the specified is not in the dictionary. + The key for the value to retrieve or add. + The function to execute to obtain the value to insert into the dictionary if the key is not found. + The argument to pass to the value factory. + The type of the keys contained in the collection. + The type of the values contained in the collection. + The type of the argument supplied to the value factory. + The value at the specified key or if the key was not present. + + + Compares two immutable arrays for equality and, if they are equal, replaces one of the arrays. + The destination, whose value is compared with and possibly replaced. + The value that replaces the destination value if the comparison results in equality. + The value that is compared to the value at . + The type of element stored by the array. + The original value in . + + + Sets an array to the specified array and returns a reference to the original array, as an atomic operation. + The array to set to the specified value. + The value to which the parameter is set. + The type of element stored by the array. + The original value of . + + + Sets an array to the specified array if the array has not been initialized. + The array to set to the specified value. + The value to which the parameter is set, if it's not initialized. + The type of element stored by the array. + + if the array was assigned the specified value; otherwise, . + + + Pushes a new element onto the stack. + The stack to update. + The value to push on the stack. + The type of items in the stack. + + + Adds the specified key and value to the dictionary if the key is not in the dictionary. + The dictionary to update with the specified key and value. + The key to add, if is not already defined in the dictionary. + The value to add. + The type of the keys contained in the collection. + The type of the values contained in the collection. + + if the key is not in the dictionary; otherwise, . + + + Atomically removes and returns the specified element at the head of the queue, if the queue is not empty. + The variable or field to atomically update. + Set to the value from the head of the queue, if the queue not empty. + The type of items in the queue. + + if the queue is not empty and the head element is removed; otherwise, . + + + Removes an element from the top of the stack, if there is an element to remove. + The stack to update. + Receives the value removed from the stack, if the stack is not empty. + The type of items in the stack. + + if an element is removed from the stack; otherwise, . + + + Removes the element with the specified key, if the key exists. + The dictionary to update. + The key to remove. + Receives the value of the removed item, if the dictionary is not empty. + The type of the keys contained in the collection. + The type of the values contained in the collection. + + if the key was found and removed; otherwise, . + + + Sets the specified key to the specified value if the specified key already is set to a specific value. + The dictionary to update. + The key to update. + The new value to set. + The current value for in order for the update to succeed. + The type of the keys contained in the collection. + The type of the values contained in the collection. + + if and are present in the dictionary and comparison was updated to ; otherwise, . + + + Mutates a value in-place with optimistic locking transaction semantics via a specified transformation function. The transformation is retried as many times as necessary to win the optimistic locking race. + The variable or field to be changed, which may be accessed by multiple threads. + A function that mutates the value. This function should be side-effect free, as it may run multiple times when races occur with other threads. + The type of data. + + if the location's value is changed by applying the result of the function; if the location's value remained the same because the last invocation of returned the existing value. + + + Mutates an immutable array in-place with optimistic locking transaction semantics via a specified transformation function. + The transformation is retried as many times as necessary to win the optimistic locking race. + The immutable array to be changed. + A function that produces the new array from the old. This function should be side-effect free, as it may run multiple times when races occur with other threads. + The type of data in the immutable array. + + if the location's value is changed by applying the result of the function; if the location's value remained the same because the last invocation of returned the existing value. + + + Mutates a value in-place with optimistic locking transaction semantics via a specified transformation function. The transformation is retried as many times as necessary to win the optimistic locking race. + The variable or field to be changed, which may be accessed by multiple threads. + A function that mutates the value. This function should be side-effect free, as it may run multiple times when races occur with other threads. + The argument to pass to . + The type of data. + The type of argument passed to the . + + if the location's value is changed by applying the result of the function; if the location's value remained the same because the last invocation of returned the existing value. + + + Mutates an immutable array in-place with optimistic locking transaction semantics via a specified transformation function. + The transformation is retried as many times as necessary to win the optimistic locking race. + The immutable array to be changed. + A function that produces the new array from the old. This function should be side-effect free, as it may run multiple times when races occur with other threads. + The argument to pass to . + The type of data in the immutable array. + The type of argument passed to the . + + if the location's value is changed by applying the result of the function; if the location's value remained the same because the last invocation of returned the existing value. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Creates an empty immutable list. + The type of items to be stored in the . + An empty immutable list. + + + Creates a new immutable list that contains the specified item. + The item to prepopulate the list with. + The type of items in the . + A new that contains the specified item. + + + Creates a new immutable list that contains the specified array of items. + An array that contains the items to prepopulate the list with. + The type of items in the . + A new immutable list that contains the specified items. + + + Creates a new immutable list builder. + The type of items stored by the collection. + The immutable collection builder. + + + Creates a new immutable list that contains the specified items. + The items to add to the list. + The type of items in the . + An immutable list that contains the specified items. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the list. + The list to search. + The object to locate in the list. The value can be null for reference types. + The type of items in the list. + The zero-based index of the first occurrence of item within the range of elements in the list that extends from index to the last element, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the list. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The equality comparer to use in the search. + The type of items in the list. + The zero-based index of the first occurrence of item within the range of elements in the immutable list that extends from index to the last element, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The type of items in the list. + The zero-based index of the first occurrence of item within the range of elements in the Immutable list that extends from index to the last element, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The number of elements in the section to search. + The type of items in the list. + The zero-based index of the first occurrence of item within the range of elements in the Immutable list that extends from index to the last element, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the entire immutable list. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The type of items in the list. + The zero-based index of the last occurrence of item within the entire the Immutable list, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the entire immutable list. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The equality comparer to use in the search. + The type of items in the list. + The zero-based index of the last occurrence of item within the entire the Immutable list, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The zero-based starting index of the backward search. + The type of items in the list. + The zero-based index of the last occurrence of item within the range of elements in the Immutable list that extends from the first element to index, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. + The list to search. + The object to locate in the Immutable list. The value can be null for reference types. + The zero-based starting index of the backward search. + The number of elements in the section to search. + The type of items in the list. + The zero-based index of the last occurrence of item within the range of elements in the Immutable list that extends from the first element to index, if found; otherwise, -1. + + + Removes the specified value from this list. + The list to search. + The value to remove. + The type of items in the list. + A new immutable list with the element removed, or this list if the element is not in this list. + + + Removes the specified values from this list. + The list to search. + The items to remove if matches are found in this list. + The type of items in the list. + A new immutable list with the elements removed. + + + Replaces the first equal element in the list with the specified element. + The list to search. + The element to replace. + The element to replace the old element with. + The type of items in the list. + Thrown when the old value does not exist in the list. + The new list -- even if the value being replaced is equal to the new value for that position. + + + Enumerates a sequence and produces an immutable list of its contents. + The sequence to enumerate. + The type of the elements in the sequence. + An immutable list that contains the items in the specified sequence. + + + Creates an immutable list from the current contents of the builder's collection. + The builder to create the immutable list from. + The type of the elements in the list. + An immutable list that contains the current contents in the builder's collection. + + + Represents an immutable list, which is a strongly typed list of objects that can be accessed by index. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the list. + + + Gets an empty set with the default sort comparer. + + + Adds the specified object to the end of the immutable list. + The object to add. + A new immutable list with the object added. + + + Adds the elements of the specified collection to the end of the immutable list. + The collection whose elements will be added to the end of the list. + A new immutable list with the elements added. + + + Searches the entire sorted list for an element using the default comparer and returns the zero-based index of the element. + The object to locate. The value can be for reference types. + The default comparer cannot find a comparer implementation of the for type T. + The zero-based index of item in the sorted List, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of . + + + Searches the entire sorted list for an element using the specified comparer and returns the zero-based index of the element. + The object to locate. The value can be null for reference types. + The comparer implementation to use when comparing elements or null to use the default comparer. + comparer is , and the default comparer cannot find an comparer implementation for type T. + The zero-based index of item in the sorted List, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of . + + + Searches a range of elements in the sorted list for an element using the specified comparer and returns the zero-based index of the element. + The zero-based starting index of the range to search. + The length of the range to search. + The object to locate. The value can be null for reference types. + The comparer implementation to use when comparing elements, or to use the default comparer. + index is less than 0 or is less than 0. + index and do not denote a valid range in the list. + + is , and the default comparer cannot find an comparer implementation for type T. + The zero-based index of item in the sorted list, if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of . + + + Removes all elements from the immutable list. + An empty list that retains the same sort or unordered semantics that this instance has. + + + Determines whether this immutable list contains the specified value. + The value to locate. + + if the list contains the specified value; otherwise, . + + + Converts the elements in the current immutable list to another type, and returns a list containing the converted elements. + A delegate that converts each element from one type to another type. + The type of the elements of the target array. + A list of the target type containing the converted elements from the current . + + + Copies the entire immutable list to a compatible one-dimensional array, starting at the beginning of the target array. + The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. + + + Copies the entire immutable list to a compatible one-dimensional array, starting at the specified index of the target array. + The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Copies a range of elements from the immutable list to a compatible one-dimensional array, starting at the specified index of the target array. + The zero-based index in the source immutable list at which copying begins. + The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. + The zero-based index in array at which copying begins. + The number of elements to copy. + + + Determines whether the immutable list contains elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to search for. + + if the immutable list contains one or more elements that match the conditions defined by the specified predicate; otherwise, . + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The first element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type . + + + Retrieves all the elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to search for. + An immutable list that contains all the elements that match the conditions defined by the specified predicate, if found; otherwise, an empty immutable list. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that starts at the specified index and contains the specified number of elements. + The zero-based starting index of the search. + The number of elements in the section to search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. + The zero-based starting index of the search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, ?1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the last occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The last element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type . + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. + The zero-based starting index of the backward search. + The number of elements in the section to search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, ?1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. + The zero-based starting index of the backward search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, ?1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, ?1. + + + Performs the specified action on each element of the immutable list. + The delegate to perform on each element of the immutable list. + + + Returns an enumerator that iterates through the immutable list. + An enumerator that can be used to iterate through the immutable list. + + + Creates a shallow copy of a range of elements in the source immutable list. + The zero-based index at which the range starts. + The number of elements in the range. + A shallow copy of a range of elements in the source immutable list. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the entire immutable list. + The object to locate in the immutable list. The value can be for reference types. + The zero-based index of the first occurrence of within the entire immutable list, if found; otherwise, ?1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the list that starts at the specified index and contains the specified number of elements. + The object to locate in the list The value can be null for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The number of elements in the section to search. + The equality comparer to use in the search. + The zero-based index of the first occurrence of item within the range of elements in the list that starts at index and contains count number of elements, if found; otherwise, -1. + + + Inserts the specified object into the immutable list at the specified index. + The zero-based index at which to insert the object. + The object to insert. + The new immutable list after the object is inserted. + + + Inserts the elements of a collection into the immutable list at the specified index. + The zero-based index at which to insert the elements. + The collection whose elements should be inserted. + The new immutable list after the elements are inserted. + + + Gets a read-only reference to the element of the set at the given . + The 0-based index of the element in the set to return. + + is negative or not less than . + A read-only reference to the element at the given position. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the list that contains the specified number of elements and ends at the specified index. + The object to locate in the list. The value can be null for reference types. + The zero-based starting index of the backward search. + The number of elements in the section to search. + The equality comparer to use in the search. + The zero-based index of the last occurrence of item within the range of elements in the list that contains count number of elements and ends at index, if found; otherwise, -1. + + + Removes the first occurrence of the specified object from this immutable list. + The object to remove. + A new list with the object removed, or this list if the specified object is not in this list. + + + Removes the first occurrence of the object that matches the specified value from this immutable list. + The value of the element to remove from the list. + The equality comparer to use in the search. + A new list with the object removed, or this list if the specified object is not in this list. + + + Removes all the elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to remove. + The new list with the elements removed. + + + Removes the element at the specified index. + The zero-based index of the element to remove. + A new list with the element removed. + + + Removes a range of elements from this immutable list. + The collection whose elements should be removed if matches are found in this list. + A new list with the elements removed. + + + Removes the specified values from this list. + The items to remove if matches are found in this list. + The equality comparer to use in the search. + A new list with the elements removed. + + + Removes a range of elements, starting from the specified index and containing the specified number of elements, from this immutable list. + The starting index to begin removal. + The number of elements to remove. + A new list with the elements removed. + + + Replaces the specified element in the immutable list with a new element. + The element to replace. + The element to replace with. + + does not exist in the immutable list. + The new list with the replaced element, even if it is equal to the old element. + + + Replaces the specified element in the immutable list with a new element. + The element to replace in the list. + The element to replace with. + The comparer to use to check for equality. + A new list with the object replaced, or this list if the specified object is not in this list. + + + Reverses the order of the elements in the entire immutable list. + The reversed list. + + + Reverses the order of the elements in the specified range of the immutable list. + The zero-based starting index of the range to reverse. + The number of elements in the range to reverse. + The reversed list. + + + Replaces an element at a given position in the immutable list with the specified element. + The position in the list of the element to replace. + The element to replace the old element with. + The new list with the replaced element, even if it is equal to the old element at that position. + + + Sorts the elements in the entire immutable list using the default comparer. + The sorted list. + + + Sorts the elements in the entire immutable list using the specified comparer. + The implementation to use when comparing elements, or to use the default comparer (). + The sorted list. + + + Sorts the elements in the entire immutable list using the specified comparer. + The delegate to use when comparing elements. + + is . + The sorted list. + + + Sorts a range of elements in the immutable list using the specified comparer. + The zero-based starting index of the range to sort. + The length of the range to sort. + The implementation to use when comparing elements, or to use the default comparer (). + The sorted list. + + + Adds the specified item to the immutable list. + The item to add. + Always thrown. + + + Removes all items from the immutable list. + + + + Removes the first occurrence of a specific object from the immutable list. + The object to remove. + Always thrown. + + if was successfully removed from the list; otherwise, . This method also returns if is not found in the original list. + + + Returns an enumerator that iterates through the immutable list. + An enumerator that can be used to iterate through the list. + + + Inserts an object in the immutable list at the specified index. + The zero-based index at which should be inserted. + The object to insert. + + + + Removes the value at the specified index. + The zero-based index of the item to remove. + + + + Copies the entire immutable list to a compatible one-dimensional array, starting at the specified array index. + The one-dimensional array that is the destination of the elements copied from immutable list. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through the immutable list. + An enumerator that can be used to iterate through the list. + + + Adds an item to the immutable list. + The object to add to the list. + Always thrown. + The position into which the new element was inserted, or -1 to indicate that the item was not inserted into the list. + + + Removes all items from the immutable list. + Always thrown. + + + Determines whether the immutable list contains a specific value. + The object to locate in the list. + + + if the object is found in the list; otherwise, . + + + Determines the index of a specific item in the immutable list. + The object to locate in the list. + + The index of if found in the list; otherwise, -1. + + + Inserts an item into the immutable list at the specified index. + The zero-based index at which should be inserted. + The object to insert into the list. + Always thrown. + + + Removes the first occurrence of a specific object from the immutable list. + The object to remove from the list. + Always thrown. + + + Removes the item at the specified index of the immutable list. + The zero-based index of the item to remove. + Always thrown. + + + Adds the specified value to this immutable list. + The value to add. + A new list with the element added. + + + Adds the specified values to this immutable list. + The values to add. + A new list with the elements added. + + + Retrieves an empty list that has the same sorting and ordering semantics as this instance. + An empty list that has the same sorting and ordering semantics as this instance. + + + Inserts the specified element at the specified index in the immutable list. + The index at which to insert the value. + The element to insert. + A new immutable list that includes the specified element. + + + Inserts the specified elements at the specified index in the immutable list. + The index at which to insert the elements. + The elements to insert. + A new immutable list that includes the specified elements. + + + Removes the element with the specified value from the list. + The value of the element to remove from the list. + The comparer to use to compare elements for equality. + A new with the specified element removed. + + + Removes all the elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to remove. + A new immutable list with the elements removed. + + + Removes the element at the specified index of the immutable list. + The index of the element to remove. + A new list with the element removed. + + + Removes a range of elements from this immutable list that match the items specified. + The range of items to remove from the list, if found. + The equality comparer to use to compare elements. + + or is . + An immutable list with the items removed. + + + Removes the specified number of elements at the specified location from this list. + The starting index of the range of elements to remove. + The number of elements to remove. + A new list with the elements removed. + + + Replaces an element in the list with the specified element. + The element to replace. + The element to replace the old element with. + The equality comparer to use in the search. + Thrown when the old value does not exist in the list. + The new list. + + + Replaces an element in the list at a given position with the specified element. + The position in the list of the element to replace. + The element to replace the old element with. + The new list. + + + Creates a list that has the same contents as this list and can be efficiently mutated across multiple operations using standard mutable interfaces. + The created list with the same contents as this list. + + + Determines whether every element in the immutable list matches the conditions defined by the specified predicate. + The delegate that defines the conditions to check against the elements. + + if every element in the immutable list matches the conditions defined by the specified predicate; otherwise, . If the list has no elements, the return value is . + + + Gets the number of elements contained in the list. + The number of elements in the list. + + + Gets a value that indicates whether this list is empty. + + if the list is empty; otherwise, . + + + Gets the element at the specified index of the list. + The index of the element to retrieve. + In a get operation, is negative or not less than . + The element at the specified index. + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the value at the specified index. + The zero-based index of the item to access. + Thrown from getter when is negative or not less than . + Always thrown from the setter. + Value stored in the specified index. + + + This type is immutable, so it is always thread-safe. See the interface. + Boolean value determining whether the collection is thread-safe. + + + See . + Object used for synchronizing access to the collection. + + + Gets a value indicating whether the has a fixed size. + + if the has a fixed size; otherwise, . + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the at the specified index. + The index. + Thrown from getter when is negative or not less than . + Always thrown from the setter. + The value at the specified index. + + + Represents a list that mutates with little or no memory allocations and that can produce or build on immutable list instances very efficiently. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Adds an item to the immutable list. + The item to add to the list. + + + Adds a series of elements to the end of this list. + The elements to add to the end of the list. + + + Searches the entire for an element using the default comparer and returns the zero-based index of the element. + The object to locate. The value can be null for reference types. + The default comparer cannot find an implementation of the generic interface or the interface for type T. + The zero-based index of item in the , if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than . + + + Searches the entire for an element using the specified comparer and returns the zero-based index of the element. + The object to locate. This value can be null for reference types. + The implementation to use when comparing elements, or for the default comparer. + + is , and the default comparer cannot find an implementation of the generic interface or the interface for type T. + The zero-based index of item in the , if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than . + + + Searches the specified range of the for an element using the specified comparer and returns the zero-based index of the element. + The zero-based starting index of the range to search. + The length of the range to search. + The object to locate. This value can be null for reference types. + The implementation to use when comparing elements, or for the default comparer. + + is less than 0. +-or- + + is less than 0. + + and do not denote a valid range in the . + + is , and the default comparer cannot find an implementation of the generic interface or the interface for type T. + The zero-based index of item in the , if item is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than . + + + Removes all items from the immutable list. + + + Determines whether the immutable list contains a specific value. + The object to locate in the list. + + if item is found in the list; otherwise, . + + + Creates a new immutable list from the list represented by this builder by using the converter function. + The converter function. + The type of the output of the delegate converter function. + A new immutable list from the list represented by this builder. + + + Copies the entire immutable list to a compatible one-dimensional array, starting at the beginning of the target array. + The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. + + + Copies the entire immutable list to a compatible one-dimensional array, starting at the specified index of the target array. + The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Copies the entire immutable list to a compatible one-dimensional array, starting at the specified index of the target array. + The zero-based index in the source immutable list at which copying begins. + The one-dimensional array that is the destination of the elements copied from the immutable list. The array must have zero-based indexing. + The zero-based index in at which copying begins. + The number of elements to copy. + + + Determines whether the immutable list contains elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to search for. + + if the immutable list contains one or more elements that match the conditions defined by the specified predicate; otherwise, . + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The first element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type . + + + Retrieves all the elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to search for. + An immutable list containing all the elements that match the conditions defined by the specified predicate, if found; otherwise, an empty immutable list. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that starts at the specified index and contains the specified number of elements. + The zero-based starting index of the search. + The number of elements in the section to search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the first occurrence of an element that matches the conditions defined by , if found; otherwise, -1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. + The zero-based starting index of the search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the first occurrence of an element that matches the conditions defined by , if found; otherwise, -1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The zero-based index of the first occurrence of an element that matches the conditions defined by , if found; otherwise, -1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the last occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The last element that matches the conditions defined by the specified predicate, found; otherwise, the default value for type . + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. + The zero-based starting index of the backward search. + The number of elements in the section to search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, -1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. + The zero-based starting index of the backward search. + The delegate that defines the conditions of the element to search for. + The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, -1. + + + Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the entire immutable list. + The delegate that defines the conditions of the element to search for. + The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, -1. + + + Performs the specified action on each element of the list. + The delegate to perform on each element of the list. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the list. + + + Creates a shallow copy of a range of elements in the source immutable list. + The zero-based index at which the range starts. + The number of elements in the range. + A shallow copy of a range of elements in the source immutable list. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list. + The object to locate in the immutable list. The value can be for reference types. + The zero-based index of the first occurrence of within the range of elements in the immutable list, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that extends from the specified index to the last element. + The object to locate in the immutable list. The value can be for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The zero-based index of the first occurrence of item within the range of elements in the immutable list that extends from to the last element, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the immutable list that starts at the specified index and contains the specified number of elements. + The object to locate in the immutable list. The value can be for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The number of elements in the section to search. + The zero-based index of the first occurrence of item within the range of elements in the immutable list that starts at and contains number of elements, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements. + The object to locate in the immutable list. The value can be for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The number of elements to search. + The value comparer to use for comparing elements for equality. + The zero-based index of the first occurrence of item within the range of elements in the immutable list that starts at and contains number of elements, if found; otherwise, -1 + + + Inserts an item to the immutable list at the specified index. + The zero-based index at which should be inserted. + The object to insert into the immutable list. + + + Inserts the elements of a collection into the immutable list at the specified index. + The zero-based index at which the new elements should be inserted. + The collection whose elements should be inserted into the immutable list. The collection itself cannot be , but it can contain elements that are null, if type T is a reference type. + + + Gets a read-only reference to the value for a given into the list. + The index of the desired element. + A read-only reference to the value at the specified . + + + Searches for the specified object and returns the zero-based index of the last occurrence within the entire immutable list. + The object to locate in the immutable list. The value can be for reference types. + The zero-based index of the last occurrence of within the entire immutable list, if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that extends from the first element to the specified index. + The object to locate in the immutable list. The value can be for reference types. + The zero-based starting index of the backward search. + The zero-based index of the last occurrence of within the range of elements in the immutable list that extends from the first element to , if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. + The object to locate in the immutable list. The value can be for reference types. + The zero-based starting index of the backward search. + The number of elements in the section to search. + The zero-based index of the last occurrence of within the range of elements in the immutable list that contains number of elements and ends at , if found; otherwise, -1. + + + Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the immutable list that contains the specified number of elements and ends at the specified index. + The object to locate in the immutable list. The value can be for reference types. + The zero-based starting index of the search. 0 (zero) is valid in an empty list. + The number of elements to search. + The value comparer to use for comparing elements for equality. + The zero-based index of the first occurrence of item within the range of elements in the immutable list that starts at and contains number of elements, if found; otherwise, -1 + + + Removes the first occurrence of a specific object from the immutable list. + The object to remove from the list. + + if item was successfully removed from the list; otherwise, . This method also returns if item is not found in the list. + + + Removes all the elements that match the conditions defined by the specified predicate. + The delegate that defines the conditions of the elements to remove. + The number of elements removed from the immutable list. + + + Removes the item at the specified index of the immutable list. + The zero-based index of the item to remove from the list. + + + Reverses the order of the elements in the entire immutable list. + + + Reverses the order of the elements in the specified range of the immutable list. + The zero-based starting index of the range to reverse. + The number of elements in the range to reverse. + + + Sorts the elements in the entire immutable list by using the default comparer. + + + Sorts the elements in the entire immutable list by using the specified comparer. + The implementation to use when comparing elements, or to use the default comparer (). + + + Sorts the elements in the entire immutable list by using the specified comparison object. + The object to use when comparing elements. + + is . + + + Sorts the elements in a range of elements in the immutable list by using the specified comparer. + The zero-based starting index of the range to sort. + The length of the range to sort. + The implementation to use when comparing elements, or to use the default comparer (). + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Copies the elements of the list to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from the list. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Adds an item to the list. + The object to add to the list. + + The position into which the new element was inserted, or -1 to indicate that the item was not inserted into the collection. + + + Removes all items from the list. + + + + Determines whether the list contains a specific value. + The object to locate in the list. + + + if the is found in the list; otherwise, . + + + Determines the index of a specific item in the list. + The object to locate in the list. + + The index of if found in the list; otherwise, -1. + + + Inserts an item to the list at the specified index. + The zero-based index at which should be inserted. + The object to insert into the list. + + + + Removes the first occurrence of a specific object from the list. + The object to remove from the list. + + + + Creates an immutable list based on the contents of this instance. + An immutable list. + + + Determines whether every element in the immutable list matches the conditions defined by the specified predicate. + The delegate that defines the conditions to check against the elements. + + if every element in the immutable list matches the conditions defined by the specified predicate; otherwise, . If the list has no elements, the return value is . + + + Gets the number of elements in this immutable list. + The number of elements in this list. + + + Gets or sets the value for a given index in the list. + The index of the item to get or set. + The value at the specified index. + + + Gets a value that indicates whether this instance is read-only. + Always . + + + Gets a value that indicates whether access to the is synchronized (thread safe). + + if access to the is synchronized (thread safe); otherwise, . + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Gets a value that indicates whether the has a fixed size. + + if the has a fixed size; otherwise, . + + + Gets a value that indicates whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the at the specified index. + The index. + The object at the specified index. + + + Enumerates the contents of a binary tree. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Releases the resources used by the current instance of the class. + + + Advances enumeration to the next element of the immutable list. + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the list. + + + Sets the enumerator to its initial position, which is before the first element in the immutable list. + + + Gets the element at the current position of the enumerator. + The element at the current position of the enumerator. + + + The current element. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Creates an empty immutable queue. + The type of items to be stored in the immutable queue. + An empty immutable queue. + + + Creates a new immutable queue that contains the specified item. + The item to prepopulate the queue with. + The type of items in the immutable queue. + A new immutable queue that contains the specified item. + + + Creates a new immutable queue that contains the specified array of items. + An array that contains the items to prepopulate the queue with. + The type of items in the immutable queue. + A new immutable queue that contains the specified items. + + + Creates a new immutable queue that contains the specified items. + The items to add to the queue before immutability is applied. + The type of elements in the queue. + An immutable queue that contains the specified items. + + + Removes the item at the beginning of the immutable queue, and returns the new queue. + The queue to remove the item from. + When this method returns, contains the item from the beginning of the queue. + The type of elements in the immutable queue. + The stack is empty. + The new queue with the item removed. + + + Represents an immutable queue. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the queue. + + + Removes all objects from the immutable queue. + The empty immutable queue. + + + Removes the element at the beginning of the immutable queue, and returns the new queue. + The queue is empty. + The new immutable queue; never . + + + Removes the item at the beginning of the immutable queue, and returns the new queue. + When this method returns, contains the element from the beginning of the queue. + The queue is empty. + The new immutable queue with the beginning element removed. + + + Adds an element to the end of the immutable queue, and returns the new queue. + The element to add. + The new immutable queue. + + + Returns an enumerator that iterates through the immutable queue. + An enumerator that can be used to iterate through the queue. + + + Returns the element at the beginning of the immutable queue without removing it. + The queue is empty. + The element at the beginning of the queue. + + + Gets a read-only reference to the element at the front of the queue. + The queue is empty. + Read-only reference to the element at the front of the queue. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Returns an enumerator that iterates through a collection. + An object that can be used to iterate through the collection. + + + Removes all elements from the immutable queue. + The empty immutable queue. + + + Removes the element at the beginning of the immutable queue, and returns the new queue. + Thrown when the queue is empty. + The new immutable queue; never . + + + Adds an element to the end of the immutable queue, and returns the new queue. + The element to add. + The new immutable queue. + + + Gets an empty immutable queue. + An empty immutable queue. + + + Gets a value that indicates whether this immutable queue is empty. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + if this queue is empty; otherwise, . + + + Enumerates the contents of an immutable queue without allocating any memory. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Advances the enumerator to the next element of the immutable queue. + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the queue. + + + Gets the element at the current position of the enumerator. + The element at the current position of the enumerator. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Creates an empty immutable sorted dictionary. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + An empty immutable sorted dictionary. + + + Creates an empty immutable sorted dictionary that uses the specified key comparer. + The implementation to use to determine the equality of keys in the dictionary. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + An empty immutable sorted dictionary. + + + Creates an empty immutable sorted dictionary that uses the specified key and value comparers. + The implementation to use to determine the equality of keys in the dictionary. + The implementation to use to determine the equality of values in the dictionary. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + An empty immutable sorted dictionary. + + + Creates a new immutable sorted dictionary builder. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + The immutable collection builder. + + + Creates a new immutable sorted dictionary builder. + The key comparer. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + The immutable collection builder. + + + Creates a new immutable sorted dictionary builder. + The key comparer. + The value comparer. + The type of keys stored by the dictionary. + The type of values stored by the dictionary. + The immutable collection builder. + + + Creates a new immutable sorted dictionary from the specified range of items with the specified key comparer. + The comparer implementation to use to evaluate keys for equality and sorting. + The items to add to the sorted dictionary. + The type of keys stored in the dictionary. + The type of values stored in the dictionary. + The new immutable sorted dictionary that contains the specified items and uses the specified key comparer. + + + Creates a new immutable sorted dictionary from the specified range of items with the specified key and value comparers. + The comparer implementation to use to compare keys for equality and sorting. + The comparer implementation to use to compare values for equality and sorting. + The items to add to the sorted dictionary before it's immutable. + The type of keys stored in the dictionary. + The type of values stored in the dictionary. + An immutable sorted dictionary that contains the specified items and uses the specified comparers. + + + Creates an immutable sorted dictionary that contains the specified items and uses the default comparer. + The items to add to the sorted dictionary before it's immutable. + The type of keys stored in the dictionary. + The type of values stored in the dictionary. + An immutable sorted dictionary that contains the specified items. + + + Enumerates a sequence of key/value pairs and produces an immutable sorted dictionary of its contents. + The sequence of key/value pairs to enumerate. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable sorted dictionary that contains the key/value pairs in the specified sequence. + + + Enumerates a sequence of key/value pairs and produces an immutable dictionary of its contents by using the specified key comparer. + The sequence of key/value pairs to enumerate. + The key comparer to use when building the immutable dictionary. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable sorted dictionary that contains the key/value pairs in the specified sequence. + + + Enumerates a sequence of key/value pairs and produces an immutable sorted dictionary of its contents by using the specified key and value comparers. + The sequence of key/value pairs to enumerate. + The key comparer to use when building the immutable dictionary. + The value comparer to use for the immutable dictionary. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable sorted dictionary that contains the key/value pairs in the specified sequence. + + + Creates an immutable sorted dictionary from the current contents of the builder's dictionary. + The builder to create the immutable sorted dictionary from. + The type of the keys in the dictionary. + The type of the values in the dictionary. + An immutable sorted dictionary that contains the current contents in the builder's dictionary. + + + Enumerates and transforms a sequence, and produces an immutable sorted dictionary of its contents. + The sequence to enumerate to generate the dictionary. + The function that will produce the key for the dictionary from each sequence element. + The function that will produce the value for the dictionary from each sequence element. + The type of the elements in the sequence. + The type of the keys in the resulting dictionary. + The type of the values in the resulting dictionary. + An immutable sorted dictionary that contains the items in the specified sequence. + + + Enumerates and transforms a sequence, and produces an immutable sorted dictionary of its contents by using the specified key comparer. + The sequence to enumerate to generate the dictionary. + The function that will produce the key for the dictionary from each sequence element. + The function that will produce the value for the dictionary from each sequence element. + The key comparer to use for the dictionary. + The type of the elements in the sequence. + The type of the keys in the resulting dictionary. + The type of the values in the resulting dictionary. + An immutable dictionary that contains the items in the specified sequence. + + + Enumerates and transforms a sequence, and produces an immutable sorted dictionary of its contents by using the specified key and value comparers. + The sequence to enumerate to generate the dictionary. + The function that will produce the key for the dictionary from each sequence element. + The function that will produce the value for the dictionary from each sequence element. + The key comparer to use for the dictionary. + The value comparer to use for the dictionary. + The type of the elements in the sequence. + The type of the keys in the resulting dictionary. + The type of the values in the resulting dictionary. + An immutable sorted dictionary that contains the items in the specified sequence. + + + Represents an immutable sorted dictionary. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of the key contained in the dictionary. + The type of the value contained in the dictionary. + + + Gets an empty immutable sorted dictionary. + + + Adds an element with the specified key and value to the immutable sorted dictionary. + The key of the entry to add. + The value of entry to add. + The given key already exists in the dictionary but has a different value. + A new immutable sorted dictionary that contains the additional key/value pair. + + + Adds the specific key/value pairs to the immutable sorted dictionary. + The key/value pairs to add. + One of the given keys already exists in the dictionary but has a different value. + A new immutable dictionary that contains the additional key/value pairs. + + + Retrieves an empty immutable sorted dictionary that has the same ordering and key/value comparison rules as this dictionary instance. + An empty dictionary with equivalent ordering and key/value comparison rules. + + + Determines whether this immutable sorted dictionary contains the specified key/value pair. + The key/value pair to locate. + + if the specified key/value pair is found in the dictionary; otherwise, . + + + Determines whether this immutable sorted map contains the specified key. + The key to locate. + + if the immutable dictionary contains the specified key; otherwise, . + + + Determines whether the immutable sorted dictionary contains an element with the specified value. + The value to locate. The value can be for reference types. + + if the dictionary contains an element with the specified value; otherwise, . + + + Returns an enumerator that iterates through the immutable sorted dictionary. + An enumerator that can be used to iterate through the dictionary. + + + Removes the element with the specified value from the immutable sorted dictionary. + The value of the element to remove. + A new immutable dictionary with the specified element removed; or this instance if the specified value cannot be found in the dictionary. + + + Removes the elements with the specified keys from the immutable sorted dictionary. + The keys of the elements to remove. + A new immutable dictionary with the specified keys removed; or this instance if the specified keys cannot be found in the dictionary. + + + Sets the specified key and value in the immutable sorted dictionary, possibly overwriting an existing value for the given key. + The key of the entry to add. + The key value to set. + A new immutable sorted dictionary that contains the specified key/value pair. + + + Sets the specified key/value pairs in the immutable sorted dictionary, possibly overwriting existing values for the keys. + The key/value pairs to set in the dictionary. If any of the keys already exist in the dictionary, this method will overwrite their previous values. + An immutable dictionary that contains the specified key/value pairs. + + + Adds an item to the . + The object to add to the . + + + Removes all items from the . + + + Copies the elements of the to an , starting at a particular index. + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + + Removes the first occurrence of a specific object from the . + The object to remove from the . + + if was successfully removed from the ; otherwise, . This method also returns if is not found in the original . + + + Adds an element with the provided key and value to the generic dictionary. + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + is . + An element with the same key already exists in the . + The is read-only. + + + Removes the element with the specified key from the generic dictionary. + The key of the element to remove. + + is . + The is read-only. + + if the element is successfully removed; otherwise, . This method also returns if was not found in the original generic dictionary. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Copies the elements of the dictionary to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Adds an element with the provided key and value to the dictionary object. + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + + Clears this instance. + The dictionary object is read-only. + + + Determines whether the immutable dictionary object contains an element with the specified key. + The key to locate in the dictionary object. + + if the dictionary contains an element with the key; otherwise, . + + + Returns an object for the immutable dictionary object. + An enumerator object for the dictionary object. + + + Removes the element with the specified key from the immutable dictionary object. + The key of the element to remove. + + + Returns an enumerator that iterates through a collection. + An enumerator object that can be used to iterate through the collection. + + + See the interface. + Key of the entry to be added. + Value of the entry to be added. + The instance. + + + See the interface. + Sequence of key/value pairs to be added. + The instance. + + + See the interface. + The instance. + + + See the interface. + Key of entry to be removed. + The instance. + + + See the interface. + Sequence of keys to be removed. + The instance. + + + See the interface. + Key of entry to be updated. + Value of entry to be updated. + The instance. + + + Applies a given set of key-value pairs to an immutable dictionary, replacing any conflicting keys in the resulting dictionary. + A set of key-value pairs to set on the map. + The instance. + + + Creates an immutable sorted dictionary with the same contents as this dictionary that can be efficiently mutated across multiple operations by using standard mutable interfaces. + A collection with the same contents as this dictionary. + + + Determines whether this dictionary contains a specified key. + The key to search for. + The matching key located in the dictionary if found, or equalkey if no match is found. + + if a match for is found; otherwise, . + + + Gets the value associated with the specified key. + The key whose value will be retrieved. + When this method returns, contains the value associated with the specified key, if the key is found; otherwise, contains the default value for the type of the parameter. + + if the dictionary contains an element with the specified key; otherwise, . + + + Returns a read-only reference to the value associated with the provided . + Key of the entry to be looked up. + The is not present. + A read-only reference to the value associated with the provided . + + + Gets an instance of the immutable sorted dictionary that uses the specified key comparer. + The key comparer to use. + An instance of the immutable dictionary that uses the given comparer. + + + Gets an instance of the immutable sorted dictionary that uses the specified key and value comparers. + The key comparer to use. + The value comparer to use. + An instance of the immutable dictionary that uses the given comparers. + + + Gets the number of key/value pairs in the immutable sorted dictionary. + The number of key/value pairs in the dictionary. + + + Gets a value that indicates whether this instance of the immutable sorted dictionary is empty. + + if this instance is empty; otherwise, . + + + Gets the associated with the specified key. + The key to retrieve the value for. + The value associated with the specified key. If no results are found, the operation throws an exception. + + + Gets the key comparer for the immutable sorted dictionary. + The key comparer for the dictionary. + + + Gets the keys in the immutable sorted dictionary. + The keys in the immutable dictionary. + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the with the specified key. + The object to use as the key of the element to access. + An object of type associated with the . + + + Gets the keys. + A collection containing the keys. + + + Gets the values. + A collection containing the values. + + + Gets a value indicating whether access to the is synchronized (thread safe). + + if access to the is synchronized (thread-safe); otherwise, . + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Gets a value indicating whether the object has a fixed size. + + if the object has a fixed size; otherwise, . + + + Gets a value indicating whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the element with the specified key. + The key of the element to be accessed. + Value stored under the specified key. + + + Gets an containing the keys of the . + An containing the keys of the object that implements . + + + Gets an containing the values in the . + An containing the values in the object that implements . + + + Gets the value comparer used to determine whether values are equal. + The value comparer used to determine whether values are equal. + + + Gets the values in the immutable sorted dictionary. + The values in the dictionary. + + + Represents a sorted dictionary that mutates with little or no memory allocations and that can produce or build on immutable sorted dictionary instances very efficiently. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + + Adds an element that has the specified key and value to the immutable sorted dictionary. + The key of the element to add. + The value of the element to add. + + + Adds the specified item to the immutable sorted dictionary. + The object to add to the dictionary. + + + Adds a sequence of values to the immutable sorted dictionary. + The items to add to the dictionary. + + + Removes all items from the immutable sorted dictionary. + + + Determines whether the immutable sorted dictionary contains a specific value. + The object to locate in the dictionary. + + if is found in the dictionary; otherwise, . + + + Determines whether the immutable sorted dictionary contains an element with the specified key. + The key to locate in the dictionary. + + if the dictionary contains an element with the key; otherwise, . + + + Determines whether the immutable sorted dictionary contains an element with the specified value. + The value to locate in the dictionary. The value can be for reference types. + + if the immutable sorted dictionary contains an element with the specified value; otherwise, . + + + Returns an enumerator that iterates through the immutable sorted dictionary. + An enumerator that can be used to iterate through the dictionary. + + + Gets the value for a given key if a matching key exists in the dictionary; otherwise the default value. + The key to search for. + The value for the key, or default(TValue) if no matching key was found. + + + Gets the value for a given key if a matching key exists in the dictionary; otherwise the default value. + The key to search for. + The default value to return if no matching key is found in the dictionary. + The value for the key, or if no matching key was found. + + + Removes the element with the specified key from the immutable sorted dictionary. + The key of the element to remove. + + if the element is successfully removed; otherwise, . This method also returns if was not found in the original dictionary. + + + Removes the first occurrence of a specific object from the immutable sorted dictionary. + The object to remove from the dictionary. + + if was successfully removed from the dictionary; otherwise, . This method also returns if is not found in the dictionary. + + + Removes any entries with keys that match those found in the specified sequence from the immutable sorted dictionary. + The keys for entries to remove from the dictionary. + + + See + The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + See + An enumerator that can be used to iterate through the collection. + + + Copies the elements of the dictionary to an array, starting at a particular array index. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The one-dimensional array that is the destination of the elements copied from the dictionary. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Adds an element with the provided key and value to the dictionary object. + The key of the element to add. + The value of the element to add. + + + Determines whether the dictionary object contains an element with the specified key. + The key to locate. + + if the dictionary contains an element with the key; otherwise, . + + + Returns an object for the dictionary. + An object for the dictionary. + + + Removes the element with the specified key from the dictionary. + The key of the element to remove. + + + Returns an enumerator that iterates through a collection. + An enumerator object that can be used to iterate through the collection. + + + Creates an immutable sorted dictionary based on the contents of this instance. + An immutable sorted dictionary. + + + Determines whether this dictionary contains a specified key. + The key to search for. + The matching key located in the dictionary if found, or equalkey if no match is found. + + if a match for is found; otherwise, . + + + Gets the value associated with the specified key. + The key whose value will be retrieved. + When this method returns, contains the value associated with the specified key, if the key is found; otherwise, contains the default value for the type of the parameter. This parameter is passed uninitialized. + + if the object that implements the dictionary contains an element with the specified key; otherwise, . + + + Returns a read-only reference to the value associated with the provided . + Key of the entry to be looked up. + The is not present. + A read-only reference to the value associated with the provided . + + + Gets the number of elements in this immutable sorted dictionary. + The number of elements in this dictionary. + + + Gets or sets the value for a specified key in the immutable sorted dictionary. + The key to retrieve the value for. + The value associated with the given key. + + + Gets or sets the key comparer. + The key comparer. + + + Gets a strongly typed, read-only collection of elements. + A strongly typed, read-only collection of elements. + + + Gets a value that indicates whether this instance is read-only. + Always . + + + Returns a collection containing all keys stored in the dictionary. See + A collection containing all keys stored in the dictionary. + + + Returns a collection containing all values stored in the dictionary. See + A collection containing all values stored in the dictionary. + + + Gets a value that indicates whether access to the is synchronized (thread safe). + + if access to the is synchronized (thread safe); otherwise, . + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Gets a value that indicates whether the object has a fixed size. + + if the object has a fixed size; otherwise, . + + + Gets a value that indicates whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the element with the specified key. + The key. + The value associated with the specified key. + + + Gets an containing the keys of the . + An containing the keys of the object that implements . + + + Gets an containing the values in the . + An containing the values in the object that implements . + + + Gets or sets the value comparer. + The value comparer. + + + Gets a collection that contains the values of the immutable sorted dictionary. + A collection that contains the values of the object that implements the dictionary. + + + Enumerates the contents of a binary tree. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + + Releases the resources used by the current instance of the class. + + + Advances the enumerator to the next element of the immutable sorted dictionary. + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the sorted dictionary. + + + Sets the enumerator to its initial position, which is before the first element in the immutable sorted dictionary. + + + Gets the element at the current position of the enumerator. + The element at the current position of the enumerator. + + + The current element. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Creates an empty immutable sorted set. + The type of items to be stored in the immutable set. + An empty immutable sorted set. + + + Creates a new immutable sorted set that contains the specified item. + The item to prepopulate the set with. + The type of items in the immutable set. + A new immutable set that contains the specified item. + + + Creates a new immutable sorted set that contains the specified array of items. + An array that contains the items to prepopulate the set with. + The type of items in the immutable set. + A new immutable set that contains the specified items. + + + Creates an empty immutable sorted set that uses the specified comparer. + The implementation to use when comparing items in the set. + The type of items in the immutable set. + An empty immutable set. + + + Creates a new immutable sorted set that contains the specified item and uses the specified comparer. + The implementation to use when comparing items in the set. + The item to prepopulate the set with. + The type of items stored in the immutable set. + A new immutable set that contains the specified item. + + + Creates a new immutable sorted set that contains the specified array of items and uses the specified comparer. + The implementation to use when comparing items in the set. + An array that contains the items to prepopulate the set with. + The type of items in the immutable set. + A new immutable set that contains the specified items. + + + Returns a collection that can be used to build an immutable sorted set. + The type of items stored by the collection. + The immutable collection builder. + + + Returns a collection that can be used to build an immutable sorted set. + The comparer used to compare items in the set for equality. + The type of items stored by the collection. + The immutable collection. + + + Creates a new immutable collection that contains the specified items. + The comparer to use to compare elements in this set. + The items to add to the set before it's immutable. + The type of items stored by the collection. + The new immutable set that contains the specified items. + + + Creates a new immutable collection that contains the specified items. + The items to add to the set with before it's immutable. + The type of items stored by the collection. + The new immutable set that contains the specified items. + + + Enumerates a sequence and produces an immutable sorted set of its contents. + The sequence to enumerate. + The type of the elements in the sequence. + An immutable sorted set that contains the items in the specified sequence. + + + Enumerates a sequence, produces an immutable sorted set of its contents, and uses the specified comparer. + The sequence to enumerate. + The comparer to use for initializing and adding members to the sorted set. + The type of the elements in the sequence. + An immutable sorted set that contains the items in the specified sequence. + + + Creates an immutable sorted set from the current contents of the builder's set. + The builder to create the immutable sorted set from. + The type of the elements in the immutable sorted set. + An immutable sorted set that contains the current contents in the builder's set. + + + Represents an immutable sorted set implementation. + +NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of elements in the set. + + + Gets an empty immutable sorted set. + + + Adds the specified value to this immutable sorted set. + The value to add. + A new set with the element added, or this set if the element is already in this set. + + + Removes all elements from the immutable sorted set. + An empty set with the elements removed. + + + Determines whether this immutable sorted set contains the specified value. + The value to check for. + + if the set contains the specified value; otherwise, . + + + Removes a specified set of items from this immutable sorted set. + The items to remove from this set. + A new set with the items removed; or the original set if none of the items were in the set. + + + Returns an enumerator that iterates through the immutable sorted set. + An enumerator that can be used to iterate through the set. + + + Gets the position within this immutable sorted set that the specified value appears in. + The value whose position is being sought. + The index of the specified in the sorted set, if is found. If is not found and is less than one or more elements in this set, this method returns a negative number that is the bitwise complement of the index of the first element that is larger than value. If is not found and is greater than any of the elements in the set, this method returns a negative number that is the bitwise complement of the index of the last element plus 1. + + + Creates an immutable sorted set that contains elements that exist both in this set and in the specified set. + The set to intersect with this one. + A new immutable sorted set that contains any elements that exist in both sets. + + + Determines whether the current immutable sorted set is a proper (strict) subset of the specified collection. + The collection to compare to the current set. + + if the current set is a proper subset of ; otherwise, . + + + Determines whether the current immutable sorted set is a proper superset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper superset of ; otherwise, . + + + Determines whether the current immutable sorted set is a subset of a specified collection. + The collection to compare to the current set. + + if the current set is a subset of ; otherwise, . + + + Determines whether the current immutable sorted set is a superset of a specified collection. + The collection to compare to the current set. + + if the current set is a superset of ; otherwise, . + + + Gets a read-only reference of the element of the set at the given . + The 0-based index of the element in the set to return. + A read-only reference of the element at the given position. + + + Determines whether the current immutable sorted set and a specified collection share common elements. + The collection to compare to the current set. + + if the current set and share at least one common element; otherwise, . + + + Removes the specified value from this immutable sorted set. + The element to remove. + A new immutable sorted set with the element removed, or this set if the element was not found in the set. + + + Returns an that iterates over this immutable sorted set in reverse order. + An enumerator that iterates over the immutable sorted set in reverse order. + + + Determines whether the current immutable sorted set and the specified collection contain the same elements. + The collection to compare to the current set. + + if the sets are equal; otherwise, . + + + Creates an immutable sorted set that contains elements that exist either in this set or in a given sequence, but not both. + The other sequence of items. + The new immutable sorted set. + + + Adds the specified value to the collection. + The value to add. + + + Removes all the items from the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from collection. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Removes the first occurrence of a specific object from the collection. + The object to remove from the collection. + + if was successfully removed from the collection; otherwise, . + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Inserts an item in the set at the specified index. + The zero-based index at which should be inserted. + The object to insert into the set. + + + Removes the item at the specified index. + The zero-based index of the item to remove. + + + Adds an element to the current set and returns a value to indicate if the element was successfully added. + The element to add to the set. + + if the element is added to the set; if the element is already in the set. + + + Removes all elements in the specified collection from the current set. + The collection of items to remove from the set. + + + Modifies the current set so that it contains only elements that are also in a specified collection. + The collection to compare to the current set. + + + Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + + + Modifies the current set so that it contains all elements that are present in either the current set or the specified collection. + The collection to compare to the current set. + + + Copies the elements of the set to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through a collection. + An enumerator object that can be used to iterate through the collection. + + + Adds an item to the set. + The object to add to the set. + The set is read-only or has a fixed size. + The position into which the new element was inserted, or -1 to indicate that the item was not inserted into the collection. + + + Removes all items from the set. + Thrown in all cases. + + + Determines whether the set contains a specific value. + The object to locate in the set. + + if the object is found in the set; otherwise, . + + + Determines the index of a specific item in the set. + The object to locate in the set. + The index of if found in the list; otherwise, -1. + + + Inserts an item into the set at the specified index. + The zero-based index at which should be inserted. + The object to insert into the set. + The set is read-only or has a fixed size. + + + Removes the first occurrence of a specific object from the set. + The object to remove from the set. + The set is read-only or has a fixed size. + + + Removes the item at the specified index of the set. + The zero-based index of the item to remove. + The set is read-only or has a fixed size. + + + Adds the specified element to this immutable set. + The element to add. + A new set with the element added, or this set if the element is already in the set. + + + Retrieves an empty immutable set that has the same sorting and ordering semantics as this instance. + An empty set that has the same sorting and ordering semantics as this instance. + + + Removes the elements in the specified collection from the current immutable set. + The items to remove from this set. + The new set with the items removed; or the original set if none of the items were in the set. + + + Creates an immutable set that contains elements that exist in both this set and the specified set. + The collection to compare to the current set. + A new immutable set that contains any elements that exist in both sets. + + + Removes the specified element from this immutable set. + The element to remove. + A new set with the specified element removed, or the current set if the element cannot be found in the set. + + + Creates an immutable set that contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + A new set that contains the elements that are present only in the current set or in the specified collection, but not both. + + + Creates a new immutable set that contains all elements that are present in either the current set or in the specified collection. + The collection to add elements from. + A new immutable set with the items added; or the original set if all the items were already in the set. + + + Creates a collection that has the same contents as this immutable sorted set that can be efficiently manipulated by using standard mutable interfaces. + The sorted set builder. + + + Searches the set for a given value and returns the equal value it finds, if any. + The value to search for. + The value from the set that the search found, or the original value if the search yielded no match. + A value indicating whether the search was successful. + + + Adds a given set of items to this immutable sorted set. + The items to add. + The new set with the items added; or the original set if all the items were already in the set. + + + Returns the immutable sorted set that has the specified key comparer. + The comparer to check for. + The immutable sorted set that has the specified key comparer. + + + Gets the number of elements in the immutable sorted set. + The number of elements in the immutable sorted set. + + + Gets a value that indicates whether this immutable sorted set is empty. + + if this set is empty; otherwise, . + + + Gets the element of the immutable sorted set at the given index. + The index of the element to retrieve from the sorted set. + The element at the given index. + + + Gets the comparer used to sort keys in the immutable sorted set. + The comparer used to sort keys. + + + Gets the maximum value in the immutable sorted set, as defined by the comparer. + The maximum value in the set. + + + Gets the minimum value in the immutable sorted set, as defined by the comparer. + The minimum value in the set. + + + Returns true, since immutable collections are always read-only. See the interface. + A boolean value indicating whether the collection is read-only. + + + See the interface. + The zero-based index of the item to access. + The element stored at the specified index. + + + Returns true, since immutable collections are always thread-safe. See the interface. + A boolean value indicating whether the collection is thread-safe. + + + See . + Object used for synchronizing access to the collection. + + + Gets a value that indicates whether the has a fixed size. + + if the has a fixed size; otherwise, . + + + Gets a value that indicates whether the is read-only. + + if the is read-only; otherwise, . + + + Gets or sets the at the specified index. + The index. + + The . + + + Represents a sorted set that enables changes with little or no memory allocations, and efficiently manipulates or builds immutable sorted sets. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Adds an element to the current set and returns a value to indicate whether the element was successfully added. + The element to add to the set. + + if the element is added to the set; if the element is already in the set + + + Removes all elements from this set. + + + Determines whether the set contains the specified object. + The object to locate in the set. + + if is found in the set; otherwise, . + + + Removes the specified set of items from the current set. + The collection of items to remove from the set. + + + Returns an enumerator that iterates through the set. + A enumerator that can be used to iterate through the set. + + + Modifies the current set so that it contains only elements that are also in a specified collection. + The collection to compare to the current set. + + + Determines whether the current set is a proper (strict) subset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper subset of ; otherwise, . + + + Determines whether the current set is a proper (strict) superset of a specified collection. + The collection to compare to the current set. + + if the current set is a proper superset of ; otherwise, . + + + Determines whether the current set is a subset of a specified collection. + The collection is compare to the current set. + + if the current set is a subset of ; otherwise, . + + + Determines whether the current set is a superset of a specified collection. + The collection to compare to the current set. + + if the current set is a superset of ; otherwise, . + + + Gets a read-only reference to the element of the set at the given . + The 0-based index of the element in the set to return. + A read-only reference to the element at the given position. + + + Determines whether the current set overlaps with the specified collection. + The collection to compare to the current set. + + if the current set and share at least one common element; otherwise, . + + + Removes the first occurrence of the specified object from the set. + The object to remove from the set. + + if was removed from the set; if was not found in the set. + + + Returns an enumerator that iterates over the immutable sorted set in reverse order. + An enumerator that iterates over the set in reverse order. + + + Determines whether the current set and the specified collection contain the same elements. + The collection to compare to the current set. + + if the current set is equal to ; otherwise, . + + + Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. + The collection to compare to the current set. + + + Adds an element to the current set and returns a value to indicate whether the element was successfully added. + The element to add to the set. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from collection. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through the collection. + A enumerator that can be used to iterate through the collection. + + + Copies the elements of the set to an array, starting at a particular array index. + The one-dimensional array that is the destination of the elements copied from the set. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through the collection. + A enumerator that can be used to iterate through the collection. + + + Creates an immutable sorted set based on the contents of this instance. + An immutable set. + + + Searches the set for a given value and returns the equal value it finds, if any. + The value for which to search. + The value from the set that the search found, or the original value if the search yielded no match. + A value indicating whether the search was successful. + + + Modifies the current set so that it contains all elements that are present in both the current set and in the specified collection. + The collection to compare to the current state. + + + Gets the number of elements in the immutable sorted set. + The number of elements in this set. + + + Gets the element of the set at the given index. + The 0-based index of the element in the set to return. + The element at the given position. + + + Gets or sets the object that is used to determine equality for the values in the immutable sorted set. + The comparer that is used to determine equality for the values in the set. + + + Gets the maximum value in the immutable sorted set, as defined by the comparer. + The maximum value in the set. + + + Gets the minimum value in the immutable sorted set, as defined by the comparer. + The minimum value in the set. + + + Gets a value that indicates whether this instance is read-only. + Always . + + + Gets a value that indicates whether access to the is synchronized (thread-safe). + + if access to the is synchronized (thread-safe); otherwise, . + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Enumerates the contents of a binary tree. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Releases the resources used by the current instance of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Advances the enumerator to the next element of the immutable sorted set. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the sorted set. + + + Sets the enumerator to its initial position, which is before the first element in the immutable sorted set. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Gets the element at the current position of the enumerator. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The element at the current position of the enumerator. + + + The current element. + + + Provides a set of initialization methods for instances of the class. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Creates an empty immutable stack. + The type of items to be stored in the immutable stack. + An empty immutable stack. + + + Creates a new immutable stack that contains the specified item. + The item to prepopulate the stack with. + The type of items in the immutable stack. + A new immutable collection that contains the specified item. + + + Creates a new immutable stack that contains the specified array of items. + An array that contains the items to prepopulate the stack with. + The type of items in the immutable stack. + A new immutable stack that contains the specified items. + + + Creates a new immutable stack that contains the specified items. + The items to add to the stack before it's immutable. + The type of items in the stack. + An immutable stack that contains the specified items. + + + Removes the specified item from an immutable stack. + The stack to modify. + The item to remove from the stack. + The type of items contained in the stack. + The stack is empty. + A stack; never . + + + Represents an immutable stack. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + The type of element on the stack. + + + Removes all objects from the immutable stack. + An empty immutable stack. + + + Returns an enumerator that iterates through the immutable stack. + An enumerator that can be used to iterate through the stack. + + + Returns the object at the top of the stack without removing it. + The stack is empty. + The object at the top of the stack. + + + Gets a read-only reference to the element on the top of the stack. + Thrown when the stack is empty. + A read-only reference to the element on the top of the stack. + + + Removes the element at the top of the immutable stack and returns the stack after the removal. + The stack is empty. + A stack; never . + + + Removes the specified element from the immutable stack and returns the stack after the removal. + The value to remove from the stack. + A stack; never . + + + Inserts an object at the top of the immutable stack and returns the new stack. + The object to push onto the stack. + The new stack. + + + Returns an enumerator that iterates through the collection. + An enumerator that can be used to iterate through the collection. + + + Returns an enumerator that iterates through a collection. + An object that can be used to iterate through the collection. + + + Removes all elements from the immutable stack. + The empty immutable stack. + + + Removes the element at the top of the immutable stack and returns the new stack. + The stack is empty. + The new stack; never . + + + Inserts an element at the top of the immutable stack and returns the new stack. + The element to push onto the stack. + The new stack. + + + Gets an empty immutable stack. + An empty immutable stack. + + + Gets a value that indicates whether this instance of the immutable stack is empty. + + if this instance is empty; otherwise, . + + + Enumerates the contents of an immutable stack without allocating any memory. + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + + Advances the enumerator to the next element of the immutable stack. + + if the enumerator was successfully advanced to the next element; if the enumerator has passed the end of the stack. + + + Gets the element at the current position of the enumerator. + The element at the current position of the enumerator. + + + LINQ extension method overrides that offer greater efficiency for than the standard LINQ methods + + NuGet package: System.Collections.Immutable (about immutable collections and how to install) + + + Applies a function to a sequence of elements in a cumulative way. + The collection to apply the function to. + A function to be invoked on each element, in a cumulative way. + The type of element contained by the collection. + The final value after the cumulative function has been applied to all elements. + + + Applies a function to a sequence of elements in a cumulative way. + The collection to apply the function to. + The initial accumulator value. + A function to be invoked on each element, in a cumulative way. + The type of the accumulated value. + The type of element contained by the collection. + The final accumulator value. + + + Applies a function to a sequence of elements in a cumulative way. + The collection to apply the function to. + The initial accumulator value. + A function to be invoked on each element, in a cumulative way. + + The type of the accumulated value. + The type of result returned by the result selector. + The type of element contained by the collection. + The final accumulator value. + + + Gets a value indicating whether all elements in this array match a given condition. + The array to check for matches. + The predicate. + The type of element contained by the collection. + + if every element of the source sequence passes the test in the specified predicate; otherwise, . + + + Returns a value indicating whether this collection contains any elements. + The builder to check for matches. + The type of elements in the array. + + if the array builder contains any elements; otherwise, . + + + Gets a value indicating whether the array contains any elements. + The array to check for elements. + The type of element contained by the collection. + + if the array contains an elements; otherwise, . + + + Gets a value indicating whether the array contains any elements that match a specified condition. + The array to check for elements. + The delegate that defines the condition to match to an element. + The type of element contained by the collection. + + if an element matches the specified condition; otherwise, . + + + Returns the element at a specified index in the array. + The array to find an element in. + The index for the element to retrieve. + The type of element contained by the collection. + The item at the specified index. + + + Returns the element at a specified index in a sequence or a default value if the index is out of range. + The array to find an element in. + The index for the element to retrieve. + The type of element contained by the collection. + The item at the specified index, or the default value if the index is not found. + + + Returns the first element in the collection. + The builder to retrieve an item from. + The type of items in the array. + If the array is empty. + The first item in the list. + + + Returns the first element in an array. + The array to get an item from. + The type of element contained by the collection. + If the array is empty. + The first item in the array. + + + Returns the first element in a sequence that satisfies a specified condition. + The array to get an item from. + The delegate that defines the conditions of the element to search for. + The type of element contained by the collection. + If the array is empty. + The first item in the list if it meets the condition specified by . + + + Returns the first element in the collection, or the default value if the collection is empty. + The builder to retrieve an element from. + The type of item in the builder. + The first item in the list, if found; otherwise the default value for the item type. + + + Returns the first element of a sequence, or a default value if the sequence contains no elements. + The array to retrieve items from. + The type of element contained by the collection. + The first item in the list, if found; otherwise the default value for the item type. + + + Returns the first element of the sequence that satisfies a condition or a default value if no such element is found. + The array to retrieve elements from. + The delegate that defines the conditions of the element to search for. + The type of element contained by the collection. + The first item in the list, if found; otherwise the default value for the item type. + + + Returns the last element in the collection. + The builder to retrieve elements from. + The type of item in the builder. + Thrown if the collection is empty. + The last element in the builder. + + + Returns the last element of the array. + The array to retrieve items from. + The type of element contained by the array. + Thrown if the collection is empty. + The last element in the array. + + + Returns the last element of a sequence that satisfies a specified condition. + The array to retrieve elements from. + The delegate that defines the conditions of the element to retrieve. + The type of element contained by the collection. + Thrown if the collection is empty. + The last element of the array that satisfies the condition. + + + Returns the last element in the collection, or the default value if the collection is empty. + The builder to retrieve an element from. + The type of item in the builder. + The last element of a sequence, or a default value if the sequence contains no elements. + + + Returns the last element of a sequence, or a default value if the sequence contains no elements. + The array to retrieve items from. + The type of element contained by the collection. + The last element of a sequence, or a default value if the sequence contains no elements. + + + Returns the last element of a sequence that satisfies a condition or a default value if no such element is found. + The array to retrieve an element from. + The delegate that defines the conditions of the element to search for. + The type of element contained by the collection. + The last element of a sequence, or a default value if the sequence contains no elements. + + + Projects each element of a sequence into a new form. + The immutable array to select items from. + A transform function to apply to each element. + The type of element contained by the collection. + The type of the result element. + An whose elements are the result of invoking the transform function on each element of source. + + + Projects each element of a sequence to an , flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein. + The immutable array. + A transform function to apply to each element of the input sequence. + A transform function to apply to each element of the intermediate sequence. + The type of the elements of . + The type of the intermediate elements collected by . + The type of the elements of the resulting sequence. + An whose elements are the result of invoking the one-to-many transform function on each element of and then mapping each of those sequence elements and their corresponding source element to a result element. + + + Determines whether two sequences are equal according to an equality comparer. + The array to use for comparison. + The items to use for comparison. + The comparer to use to check for equality. + The type of element in the compared array. + The type of element contained by the collection. + + to indicate the sequences are equal; otherwise, . + + + Determines whether two sequences are equal according to an equality comparer. + The array to use for comparison. + The items to use for comparison. + The comparer to use to check for equality. + The type of element in the compared array. + The type of element contained by the collection. + + to indicate the sequences are equal; otherwise, . + + + Determines whether two sequences are equal according to an equality comparer. + The array to use for comparison. + The items to use for comparison. + The comparer to use to check for equality. + The type of element in the compared array. + The type of element contained by the collection. + + to indicate the sequences are equal; otherwise, . + + + Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence. + The array to retrieve the element from. + The type of element contained by the collection. + The element in the sequence. + + + Returns the only element of a sequence that satisfies a specified condition, and throws an exception if more than one such element exists. + + + The type of element contained by the collection. + Returns . + + + Returns the only element of the array, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence. + The array. + The type of element contained by the collection. + + contains more than one element. + The element in the array, or the default value if the array is empty. + + + Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition. + The array to get the element from. + The condition the element must satisfy. + The type of element contained by the collection. + More than one element satisfies the condition in . + The element if it satisfies the specified condition; otherwise the default element. + + + Copies the contents of this array to a mutable array. + + The type of element contained by the collection. + The newly instantiated array. + + + Creates a dictionary based on the contents of this array. + The array to create a dictionary from. + The key selector. + The type of the key. + The type of element contained by the collection. + The newly initialized dictionary. + + + Creates a dictionary based on the contents of this array. + The array to create a dictionary from. + The key selector. + The comparer to initialize the dictionary with. + The type of the key. + The type of element contained by the collection. + The newly initialized dictionary. + + + Creates a dictionary based on the contents of this array. + The array to create a dictionary from. + The key selector. + The element selector. + The type of the key. + The type of the element. + The type of element contained by the collection. + The newly initialized dictionary. + + + Creates a dictionary based on the contents of this array. + The array to create a dictionary from. + The key selector. + The element selector. + The comparer to initialize the dictionary with. + The type of the key. + The type of the element. + The type of element contained by the collection. + The newly initialized dictionary. + + + Filters a sequence of values based on a predicate. + The array to filter. + The condition to use for filtering the array content. + The type of element contained by the collection. + Returns that contains elements that meet the condition. + + + \ No newline at end of file diff --git a/UnityPackage/Assets/Plugins/System.Collections.Immutable.xml.meta b/UnityPackage/Assets/Plugins/System.Collections.Immutable.xml.meta new file mode 100644 index 0000000..28028b6 --- /dev/null +++ b/UnityPackage/Assets/Plugins/System.Collections.Immutable.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bb5dca41eb0f8034b8d21b2f61453d17 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/protobuf-net.Core.dll b/UnityPackage/Assets/Plugins/protobuf-net.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..3e2fd5c05a7f667401403b6555425af781ba973d GIT binary patch literal 271360 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�N$sf$C{yAML;(ifskB5#& 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 s2Ya6!d=~ic5%Cv`{Xci`!2i4b?>)c{4L}A + + + protobuf-net.Core + + + + + Provides support for common .NET types that do not have a direct representation + in protobuf, using the definitions from bcl.proto + + + + + Creates a new instance of the specified type, bypassing the constructor. + + The type to create + The new instance + + + + Writes a TimeSpan to a protobuf stream using protobuf-net's own representation, bcl.TimeSpan + + + + + Writes a TimeSpan to a protobuf stream using protobuf-net's own representation, bcl.TimeSpan + + + + + Parses a TimeSpan from a protobuf stream using protobuf-net's own representation, bcl.TimeSpan + + + + + Parses a TimeSpan from a protobuf stream using protobuf-net's own representation, bcl.TimeSpan + + + + + Parses a TimeSpan from a protobuf stream using the standardized format, google.protobuf.Duration + + + + + Parses a TimeSpan from a protobuf stream using the standardized format, google.protobuf.Duration + + + + + Writes a TimeSpan to a protobuf stream using the standardized format, google.protobuf.Duration + + + + + Writes a TimeSpan to a protobuf stream using the standardized format, google.protobuf.Duration + + + + + Parses a DateTime from a protobuf stream using the standardized format, google.protobuf.Timestamp + + + + + Parses a DateTime from a protobuf stream using the standardized format, google.protobuf.Timestamp + + + + + Writes a DateTime to a protobuf stream using the standardized format, google.protobuf.Timestamp + + + + + Writes a DateTime to a protobuf stream using the standardized format, google.protobuf.Timestamp + + + + + Parses a DateTime from a protobuf stream + + + + + Parses a DateTime from a protobuf stream + + + + + Writes a DateTime to a protobuf stream, excluding the Kind + + + + + Writes a DateTime to a protobuf stream, excluding the Kind + + + + + Writes a DateTime to a protobuf stream, including the Kind + + + + + Writes a DateTime to a protobuf stream, including the Kind + + + + + Parses a decimal from a protobuf stream + + + + + Parses a decimal from a protobuf stream + + + + + Parses a decimal from a protobuf stream + + + + + Writes a decimal to a protobuf stream + + + + + Writes a decimal to a protobuf stream + + + + + Writes a decimal to a protobuf stream + + + + + Writes a Guid to a protobuf stream + + + + + Writes a Guid to a protobuf stream + + + + + Writes a Guid to a protobuf stream + + + + + Writes a Guid to a protobuf stream + + + + + Parses a Guid from a protobuf stream + + + + + Parses a Guid from a protobuf stream + + + + + Parses a Guid from a protobuf stream + + + + + Parses a Guid from a protobuf stream + + + + + Provides a simple buffer-based implementation of an extension object. + + + + Specifies a method on the root-contract in an hierarchy to be invoked before serialization. + + + Specifies a method on the root-contract in an hierarchy to be invoked after serialization. + + + Specifies a method on the root-contract in an hierarchy to be invoked before deserialization. + + + Specifies a method on the root-contract in an hierarchy to be invoked after deserialization. + + + + Defines the compatibility level / conventions to use when encoding common + types into protobuf. When starting a new green-field project the highest + available level can be safely applied, but note that changing the + compatibility level changes the encoding. For this reason, it should not + be casually changed on brown-field projects, unless you are also knowingly + breaking the encoding requirements of pre-existing data. If not specified, + the oldest (lowest number) is assumed, for safety. + + + + + Functionally identical to + + + + + Uses bcl.proto for , , and , for compatibility + with all versions of protobuf-net, at the expense of being inconvenient for use with other protobuf implementations. + + + + + Like , but uses '.google.protobuf.Timestamp' for and '.google.protobuf.Duration' for . + This is functionally identical to a configuration that specifies . + + + + + Like , but uses 'string' for (big-endian hyphenated UUID format; a shorter 'bytes' variant is also available via ) + and (invariant "general" format). + + + + + Defines the compatibiltiy level to use for an element + + + + + The compatibiltiy level to use for this element + + + + + Create a new CompatibilityLevelAttribute instance + + + + + Sub-format to use when serializing/deserializing data + + + + + Uses the default encoding for the data-type. + + + + + When applied to signed integer-based data (including Decimal), this + indicates that zigzag variant encoding will be used. This means that values + with small magnitude (regardless of sign) take a small amount + of space to encode. + + + + + When applied to signed integer-based data (including Decimal), this + indicates that two's-complement variant encoding will be used. + This means that any -ve number will take 10 bytes (even for 32-bit), + so should only be used for compatibility. + + + + + When applied to signed integer-based data (including Decimal), this + indicates that a fixed amount of space will be used. + + + + + When applied to a sub-message, indicates that the value should be treated + as group-delimited. + + + + + When applied to members of types such as DateTime or TimeSpan, specifies + that the "well known" standardized representation should be use; DateTime uses Timestamp, + TimeSpan uses Duration. + + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Object + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Int64 + + + The value typed as UInt64 + + + The value typed as Int32 + + + The value typed as UInt32 + + + The value typed as Boolean + + + The value typed as Single + + + The value typed as Double + + + The value typed as DateTime + + + The value typed as TimeSpan + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Int64 + + + The value typed as UInt64 + + + The value typed as Int32 + + + The value typed as UInt32 + + + The value typed as Boolean + + + The value typed as Single + + + The value typed as Double + + + The value typed as DateTime + + + The value typed as TimeSpan + + + The value typed as Guid + + + The value typed as Object + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Int64 + + + The value typed as UInt64 + + + The value typed as Int32 + + + The value typed as UInt32 + + + The value typed as Boolean + + + The value typed as Single + + + The value typed as Double + + + The value typed as DateTime + + + The value typed as TimeSpan + + + The value typed as Guid + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Int64 + + + The value typed as UInt64 + + + The value typed as Int32 + + + The value typed as UInt32 + + + The value typed as Boolean + + + The value typed as Single + + + The value typed as Double + + + The value typed as DateTime + + + The value typed as TimeSpan + + + The value typed as Object + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Int32 + + + The value typed as UInt32 + + + The value typed as Boolean + + + The value typed as Single + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + Represent multiple types as a union; this is used as part of OneOf - + note that it is the caller's responsbility to only read/write the value as the same type + + + The value typed as Int32 + + + The value typed as UInt32 + + + The value typed as Boolean + + + The value typed as Single + + + The value typed as Object + + + Indicates whether the specified discriminator is assigned + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Create a new discriminated union value + + + Reset a value if the specified discriminator is assigned + + + The discriminator value + + + + Simple base class for supporting unexpected fields allowing + for loss-less round-tips/merge, even if the data is not understod. + The additional fields are (by default) stored in-memory in a buffer. + + As an example of an alternative implementation, you might + choose to use the file system (temporary files) as the back-end, tracking + only the paths [such an object would ideally be IDisposable and use + a finalizer to ensure that the files are removed]. + + + + + Retrieves the extension object for the current + instance, optionally creating it if it does not already exist. + + Should a new extension object be + created if it does not already exist? + The extension object if it exists (or was created), or null + if the extension object does not exist or is not available. + The createIfMissing argument is false during serialization, + and true during deserialization upon encountering unexpected fields. + + + + Provides a simple, default implementation for extension support, + optionally creating it if it does not already exist. Designed to be called by + classes implementing . + + Should a new extension object be + created if it does not already exist? + The that holds the fields, in terms of the inheritance model; the same tag key can appear against different type levels for the same instance, with different values. + The extension field to check (and possibly update). + The extension object if it exists (or was created), or null + if the extension object does not exist or is not available. + The createIfMissing argument is false during serialization, + and true during deserialization upon encountering unexpected fields. + + + + Provides a simple, default implementation for extension support, + optionally creating it if it does not already exist. Designed to be called by + classes implementing . + + Should a new extension object be + created if it does not already exist? + The extension field to check (and possibly update). + The extension object if it exists (or was created), or null + if the extension object does not exist or is not available. + The createIfMissing argument is false during serialization, + and true during deserialization upon encountering unexpected fields. + + + + Appends the value as an additional (unexpected) data-field for the instance. + Note that for non-repeated sub-objects, this equates to a merge operation; + for repeated sub-objects this adds a new instance to the set; for simple + values the new value supercedes the old value. + + Note that appending a value does not remove the old value from + the stream; avoid repeatedly appending values for the same field. + The type of the value to append. + The extensible object to append the value to. + The field identifier; the tag should not be defined as a known data-field for the instance. + The value to append. + + + + Appends the value as an additional (unexpected) data-field for the instance. + Note that for non-repeated sub-objects, this equates to a merge operation; + for repeated sub-objects this adds a new instance to the set; for simple + values the new value supercedes the old value. + + Note that appending a value does not remove the old value from + the stream; avoid repeatedly appending values for the same field. + The data-type of the field. + The data-format to use when encoding the value. + The extensible object to append the value to. + The field identifier; the tag should not be defined as a known data-field for the instance. + The value to append. + + + + Appends the value as an additional (unexpected) data-field for the instance. + Note that for non-repeated sub-objects, this equates to a merge operation; + for repeated sub-objects this adds a new instance to the set; for simple + values the new value supercedes the old value. + + Note that appending a value does not remove the old value from + the stream; avoid repeatedly appending values for the same field. + The data-type of the field. + The data-format to use when encoding the value. + The model to use for serialization. + The extensible object to append the value to. + The field identifier; the tag should not be defined as a known data-field for the instance. + The value to append. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned is the composed value after merging any duplicated content; if the + value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The effective value of the field, or the default value if not found. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned is the composed value after merging any duplicated content; if the + value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + The effective value of the field, or the default value if not found. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned is the composed value after merging any duplicated content; if the + value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The type model to use for deserialization. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + The effective value of the field, or the default value if not found. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned (in "value") is the composed value after merging any duplicated content; + if the value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The effective value of the field, or the default value if not found. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + True if data for the field was present, false otherwise. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned (in "value") is the composed value after merging any duplicated content; + if the value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The effective value of the field, or the default value if not found. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + True if data for the field was present, false otherwise. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned (in "value") is the composed value after merging any duplicated content; + if the value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The effective value of the field, or the default value if not found. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + Allow tags that are present as part of the definition; for example, to query unknown enum values. + True if data for the field was present, false otherwise. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned (in "value") is the composed value after merging any duplicated content; + if the value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The effective value of the field, or the default value if not found. + The extensible object to obtain the value from. + The type model to use for deserialization. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + Allow tags that are present as part of the definition; for example, to query unknown enum values. + True if data for the field was present, false otherwise. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + Each occurrence of the field is yielded separately, making this usage suitable for "repeated" + (list) fields. + + The extended data is processed lazily as the enumerator is iterated. + The data-type of the field. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + An enumerator that yields each occurrence of the field. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + Each occurrence of the field is yielded separately, making this usage suitable for "repeated" + (list) fields. + + The extended data is processed lazily as the enumerator is iterated. + The data-type of the field. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + An enumerator that yields each occurrence of the field. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + Each occurrence of the field is yielded separately, making this usage suitable for "repeated" + (list) fields. + + The extended data is processed lazily as the enumerator is iterated. + The data-type of the field. + The extensible object to obtain the value from. + The type model to use for deserialization. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + An enumerator that yields each occurrence of the field. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned (in "value") is the composed value after merging any duplicated content; + if the value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The model to use for configuration. + The effective value of the field, or the default value if not found. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + Allow tags that are present as part of the definition; for example, to query unknown enum values. + True if data for the field was present, false otherwise. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + Each occurrence of the field is yielded separately, making this usage suitable for "repeated" + (list) fields. + + The extended data is processed lazily as the enumerator is iterated. + The model to use for configuration. + The data-type of the field. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + An enumerator that yields each occurrence of the field. + + + + Appends the value as an additional (unexpected) data-field for the instance. + Note that for non-repeated sub-objects, this equates to a merge operation; + for repeated sub-objects this adds a new instance to the set; for simple + values the new value supercedes the old value. + + Note that appending a value does not remove the old value from + the stream; avoid repeatedly appending values for the same field. + The model to use for configuration. + The data-format to use when encoding the value. + The extensible object to append the value to. + The field identifier; the tag should not be defined as a known data-field for the instance. + The value to append. + + + + This class acts as an internal wrapper allowing us to do a dynamic + methodinfo invoke; an't put into Serializer as don't want on public + API; can't put into Serializer<T> since we need to invoke + across classes + + + + + All this does is call GetExtendedValuesTyped with the correct type for "instance"; + this ensures that we don't get issues with subclasses declaring conflicting types - + the caller must respect the fields defined for the type they pass in. + + + + + All this does is call GetExtendedValuesTyped with the correct type for "instance"; + this ensures that we don't get issues with subclasses declaring conflicting types - + the caller must respect the fields defined for the type they pass in. + + + + + Not all frameworks are created equal (fx1.1 vs fx2.0, + micro-framework, compact-framework, + silverlight, etc). This class simply wraps up a few things that would + otherwise make the real code unnecessarily messy, providing fallback + implementations if necessary. + + + + + Intended to be a direct map to regular TypeCode, but: + - with missing types + - existing on WinRT + + + + + Indicates that the implementing type has support for protocol-buffer + extensions. + + Can be implemented by deriving from Extensible. + + + + Retrieves the extension object for the current + instance, optionally creating it if it does not already exist. + + Should a new extension object be + created if it does not already exist? + The extension object if it exists (or was created), or null + if the extension object does not exist or is not available. + The createIfMissing argument is false during serialization, + and true during deserialization upon encountering unexpected fields. + + + + Indicates that the implementing type has support for protocol-buffer + extensions at multiple inheritance levels. + + Can be implemented by deriving from Extensible. + + + + Retrieves the extension object for the current + instance, optionally creating it if it does not already exist. + + Should a new extension object be + created if it does not already exist? + The that holds the fields, in terms of the inheritance model; the same tag key can appear against different type levels for the same instance, with different values. + The extension object if it exists (or was created), or null + if the extension object does not exist or is not available. + The createIfMissing argument is false during serialization, + and true during deserialization upon encountering unexpected fields. + + + + Provides addition capability for supporting unexpected fields during + protocol-buffer serialization/deserialization. This allows for loss-less + round-trip/merge, even when the data is not fully understood. + + + + + Requests a stream into which any unexpected fields can be persisted. + + A new stream suitable for storing data. + + + + Indicates that all unexpected fields have now been stored. The + implementing class is responsible for closing the stream. If + "commit" is not true the data may be discarded. + + The stream originally obtained by BeginAppend. + True if the append operation completed successfully. + + + + Requests a stream of the unexpected fields previously stored. + + A prepared stream of the unexpected fields. + + + + Indicates that all unexpected fields have now been read. The + implementing class is responsible for closing the stream. + + The stream originally obtained by BeginQuery. + + + + Requests the length of the raw binary stream; this is used + when serializing sub-entities to indicate the expected size. + + The length of the binary stream representing unexpected data. + + + + Provides the ability to remove all existing extension data + + + + + Remove all existing extension data + + + + + Specifies the method used to infer field tags for members of the type + under consideration. Tags are deduced using the invariant alphabetic + sequence of the members' names; this makes implicit field tags very brittle, + and susceptible to changes such as field names (normally an isolated + change). + + + + + No members are serialized implicitly; all members require a suitable + attribute such as [ProtoMember]. This is the recmomended mode for + most scenarios. + + + + + Public properties and fields are eligible for implicit serialization; + this treats the public API as a contract. Ordering beings from ImplicitFirstTag. + + + + + Public and non-public fields are eligible for implicit serialization; + this acts as a state/implementation serializer. Ordering beings from ImplicitFirstTag. + + + + + Provides access to the inner fields of a decimal. + Similar to decimal.GetBits(), but faster and avoids the int[] allocation + + + + + Provides access to the inner fields of a Guid. + Similar to Guid.ToByteArray(), but faster and avoids the byte[] allocation + + + + + Indicates whether a value is non-null and needs serialization (non-zero, not an empty string, etc) + + + + + Indicates whether a value is null + + + + + Represents the ability to deserialize values from an input of type + + + + + Deserialize a value from the input + + + + + Represents the ability to serialize values to an output of type + + + + + Serialize the provided value + + + + + Represents the ability to serialize values to an output of type + with pre-computation of the length + + + + + Measure the length of a value in advance of serialization + + + + + Serialize the previously measured value + + + + + Represents common state during a serialization operation; this instance should not be stored - it may be reused later with different meaning + + + + + The type-model that represents the operation + + + + + Addition information about this serialization operation. + + + + + Represents the outcome of computing the length of an object; since this may have required computing lengths + for multiple objects, some metadata is retained so that a subsequent serialize operation using + this instance can re-use the previously calculated lengths. If the object state changes between the + measure and serialize operations, the behavior is undefined. + + + + + Releases all resources associated with this value + + + + + Gets the calculated length of this serialize operation, in bytes + + + + + Returns the calculated length, disposing the value as a side-effect + + + + + Perform the calculated serialization operation against the provided target stream. If the object state changes between the + measure and serialize operations, the behavior is undefined. + + + + + Perform the calculated serialization operation against the provided target writer. If the object state changes between the + measure and serialize operations, the behavior is undefined. + + + + + Indiate the variant of the protobuf .proto DSL syntax to use + + + + + Use the global default + + + + + https://developers.google.com/protocol-buffers/docs/proto + + + + + https://developers.google.com/protocol-buffers/docs/proto3 + + + + + Options for controlling schema generation + + + + + Indiate the variant of the protobuf .proto DSL syntax to use + + + + + Additional flags to control schema generation + + + + + The package to use for generation (null to try to infer) + + + + + The services to consider as part of this operation. + + + + + The types to consider as part of this operation. + + + + + The file that defines this type (as used with import in .proto); when non-empty, only + types in the same Origin are included; this option is inferred if null. + + + + + Additional flags to control schema generation + + + + + No additional flags + + + + + Provide support for extended/multiple namespace details in schemas + + + + + Record the sub-type relationship formally in schemas + + + + + Describes a service. + + + + + The name of the service. + + + + + The methods available on the service. + + + + + Describes a method of a service. + + + + + The name of the method. + + + + + The type sent by the client. + + + + + The type returned from the server. + + + + + Identifies if server streams multiple server messages. + + + + + Identifies if client streams multiple client messages. + + + + + Event arguments needed to perform type-formatting functions; this could be resolving a Type to a string suitable for serialization, or could + be requesting a Type from a string. If no changes are made, a default implementation will be used (from the assembly-qualified names). + + + + + The type involved in this map; if this is initially null, a Type is expected to be provided for the string in FormattedName. + + + + + The formatted-name involved in this map; if this is initially null, a formatted-name is expected from the type in Type. + + + + + Delegate type used to perform type-formatting functions; the sender originates as the type-model. + + + + + Provides protobuf serialization support for a number of types + + + + + Gets or sets the buffer-size to use when writing messages via + + + + + Gets or sets the max serialization/deserialization depth + + + + + Gets a cached serializer for a type, as offered by a given provider + + + + + Specifies optional behaviors associated with a type model + + + + + No additional options + + + + + Should the deserializer attempt to avoid duplicate copies of the same string? + + + + + Should the Kind be included on date/time values? + + + + + Should zero-length packed arrays be serialized? (this is the v2 behavior, but skipping them is more efficient) + + + + + Should root-values allow "packed" encoding? (v2 does not support this) + + + + + Specifies optional behaviors associated with this model + + + + + Resolve a System.Type to the compiler-specific type + + + + + Resolve a System.Type to the compiler-specific type + + + + + Indicates whether a type is known to the model + + + + + This is the more "complete" version of Serialize, which handles single instances of mapped types. + The value is written as a complete field, including field-header and (for sub-objects) a + length-prefix + In addition to that, this provides support for: + - basic values; individual int / string / Guid / etc + - IEnumerable sequences of any type handled by TrySerializeAuxiliaryType + + + + + + Writes a protocol-buffer representation of the given instance to the supplied stream. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + + + + Writes a protocol-buffer representation of the given instance to the supplied stream. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + Additional information about this serialization operation. + + + + Writes a protocol-buffer representation of the given instance to the supplied writer. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + Additional information about this serialization operation. + + + + Writes a protocol-buffer representation of the given instance to the supplied stream. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + Additional information about this serialization operation. + + + + Writes a protocol-buffer representation of the given instance to the supplied writer. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + Additional information about this serialization operation. + + + + Calculates the length of a protocol-buffer payload for an item + + + + + Writes a protocol-buffer representation of the given instance to the supplied writer. + + The existing instance to be serialized (cannot be null). + The destination writer to write to. + + + + Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed + data - useful with network IO. + + The type being merged. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + How to encode the length prefix. + The tag used as a prefix to each record (only used with base-128 style prefixes). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed + data - useful with network IO. + + The type being merged. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + How to encode the length prefix. + The tag used as a prefix to each record (only used with base-128 style prefixes). + Used to resolve types on a per-field basis. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed + data - useful with network IO. + + The type being merged. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + How to encode the length prefix. + The tag used as a prefix to each record (only used with base-128 style prefixes). + Used to resolve types on a per-field basis. + Returns the number of bytes consumed by this operation (includes length-prefix overheads and any skipped data). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed + data - useful with network IO. + + The type being merged. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + How to encode the length prefix. + The tag used as a prefix to each record (only used with base-128 style prefixes). + Used to resolve types on a per-field basis. + Returns the number of bytes consumed by this operation (includes length-prefix overheads and any skipped data). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Reads a sequence of consecutive length-prefixed items from a stream, using + either base-128 or fixed-length prefixes. Base-128 prefixes with a tag + are directly comparable to serializing multiple items in succession + (use the tag to emulate the implicit behavior + when serializing a list/array). When a tag is + specified, any records with different tags are silently omitted. The + tag is ignored. The tag is ignores for fixed-length prefixes. + + The binary stream containing the serialized records. + The prefix style used in the data. + The tag of records to return (if non-positive, then no tag is + expected and all records are returned). + On a field-by-field basis, the type of object to deserialize (can be null if "type" is specified). + The type of object to deserialize (can be null if "resolver" is specified). + The sequence of deserialized objects. + + + + Reads a sequence of consecutive length-prefixed items from a stream, using + either base-128 or fixed-length prefixes. Base-128 prefixes with a tag + are directly comparable to serializing multiple items in succession + (use the tag to emulate the implicit behavior + when serializing a list/array). When a tag is + specified, any records with different tags are silently omitted. The + tag is ignored. The tag is ignores for fixed-length prefixes. + + The binary stream containing the serialized records. + The prefix style used in the data. + The tag of records to return (if non-positive, then no tag is + expected and all records are returned). + On a field-by-field basis, the type of object to deserialize (can be null if "type" is specified). + The type of object to deserialize (can be null if "resolver" is specified). + The sequence of deserialized objects. + Additional information about this serialization operation. + + + + Reads a sequence of consecutive length-prefixed items from a stream, using + either base-128 or fixed-length prefixes. Base-128 prefixes with a tag + are directly comparable to serializing multiple items in succession + (use the tag to emulate the implicit behavior + when serializing a list/array). When a tag is + specified, any records with different tags are silently omitted. The + tag is ignored. The tag is ignores for fixed-length prefixes. + + The type of object to deserialize. + The binary stream containing the serialized records. + The prefix style used in the data. + The tag of records to return (if non-positive, then no tag is + expected and all records are returned). + The sequence of deserialized objects. + + + + Reads a sequence of consecutive length-prefixed items from a stream, using + either base-128 or fixed-length prefixes. Base-128 prefixes with a tag + are directly comparable to serializing multiple items in succession + (use the tag to emulate the implicit behavior + when serializing a list/array). When a tag is + specified, any records with different tags are silently omitted. The + tag is ignored. The tag is ignores for fixed-length prefixes. + + The type of object to deserialize. + The binary stream containing the serialized records. + The prefix style used in the data. + The tag of records to return (if non-positive, then no tag is + expected and all records are returned). + The sequence of deserialized objects. + Additional information about this serialization operation. + + + + Writes a protocol-buffer representation of the given instance to the supplied stream, + with a length-prefix. This is useful for socket programming, + as DeserializeWithLengthPrefix can be used to read the single object back + from an ongoing stream. + + The type being serialized. + The existing instance to be serialized (cannot be null). + How to encode the length prefix. + The destination stream to write to. + The tag used as a prefix to each record (only used with base-128 style prefixes). + + + + Writes a protocol-buffer representation of the given instance to the supplied stream, + with a length-prefix. This is useful for socket programming, + as DeserializeWithLengthPrefix can be used to read the single object back + from an ongoing stream. + + The type being serialized. + The existing instance to be serialized (cannot be null). + How to encode the length prefix. + The destination stream to write to. + The tag used as a prefix to each record (only used with base-128 style prefixes). + Additional information about this serialization operation. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + Additional information about this serialization operation. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The number of bytes to consider (no limit if omitted). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + Additional information about this serialization operation. + The binary stream to apply to the instance (cannot be null). + The existing instance to be modified (can be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The number of bytes to consume. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The number of bytes to consume. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The number of bytes to consume (or -1 to read to the end of the stream). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + Additional information about this serialization operation. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The number of bytes to consume (or -1 to read to the end of the stream). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + Additional information about this serialization operation. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary payload to apply to the instance. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + Additional information about this serialization operation. + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The binary payload to apply to the instance. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + Additional information about this serialization operation. + + + + Applies a protocol-buffer reader to an existing instance (which may be null). + + The type (including inheritance) to consider. + The existing instance to be modified (can be null). + The reader to apply to the instance (cannot be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + + This is the more "complete" version of Deserialize, which handles single instances of mapped types. + The value is read as a complete field, including field-header and (for sub-objects) a + length-prefix..kmc + + + In addition to that, this provides support for: + - basic values; individual int / string / Guid / etc + - IList sets of any type handled by TryDeserializeAuxiliaryType + + + + + + Creates a new runtime model, to which the caller + can add support for a range of types. A model + can be used "as is", or can be compiled for + optimal performance. + + + + + Create a model that serializes all types from an + assembly specified by type + + + + + Create a model that serializes all types from an + assembly specified by type + + + + + Create a model that serializes all types from an assembly + + + + + Indicates whether the supplied type is explicitly modelled by the model + + + + + Indicates whether the supplied type is explicitly modelled by the model + + + + + Get a typed serializer for + + + + + Gets the inbuilt serializer relevant to a specific (and ). + Returns null if there is no defined inbuilt serializer. + + + + + Applies a protocol-buffer stream to an existing instance (which may be null). + + Represents the type (including inheritance) to consider. + The existing instance to be modified (can be null). + Reader state + The style of serialization to adopt + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Indicates the type of callback to be used + + + + + Invoked before an object is serialized + + + + + Invoked after an object is serialized + + + + + Invoked before an object is deserialized (or when a new instance is created) + + + + + Invoked after an object is deserialized + + + + + Create a deep clone of the supplied instance; any sub-items are also cloned. + + + + + Create a deep clone of the supplied instance; any sub-items are also cloned. + + + + + Indicates that while an inheritance tree exists, the exact type encountered was not + specified in that hierarchy and cannot be processed. + + + + + Indicates that while an inheritance tree exists, the exact type encountered was not + specified in that hierarchy and cannot be processed. + + + + + Indicates that while an inheritance tree exists, the exact type encountered was not + specified in that hierarchy and cannot be processed. + + + + + Returns whether the object provided is a subtype of the expected type + + + + + Indicates that the given type was not expected, and cannot be processed. + + + + + Indicates that the given type cannot be constructed; it may still be possible to + deserialize into existing instances. + + + + + Returns true if the type supplied is either a recognised contract type, + or a *list* of a recognised contract type. + + Note that primitives always return false, even though the engine + will, if forced, try to serialize such + True if this type is recognised as a serializable entity, else false + + + + Returns true if the type supplied is a basic type with inbuilt handling, + a recognised contract type, or a *list* of a basic / contract type. + + + + + Returns true if the type supplied is a basic type with inbuilt handling, + or a *list* of a basic type with inbuilt handling + + + + + Suggest a .proto definition for the given type + + The type to generate a .proto definition for, or null to generate a .proto that represents the entire model + The .proto definition as a string + + + + Suggest a .proto definition for the given type + + The type to generate a .proto definition for, or null to generate a .proto that represents the entire model + The .proto definition as a string + The .proto syntax to use for the operation + + + + Suggest a .proto definition for the given configuration + + The .proto definition as a string + Options for schema generation + + + + Used to provide custom services for writing and parsing type names when using dynamic types. Both parsing and formatting + are provided on a single API as it is essential that both are mapped identically at all times. + + + + + Creates a new IFormatter that uses protocol-buffer [de]serialization. + + A new IFormatter to be used during [de]serialization. + The type of object to be [de]deserialized by the formatter. + + + + The field number that is used as a default when serializing/deserializing a list of objects. + The data is treated as repeated message with field number 1. + + + + + Specifies the type of prefix that should be applied to messages. + + + + + No length prefix is applied to the data; the data is terminated only be the end of the stream. + + + + + A base-128 ("varint", the default prefix format in protobuf) length prefix is applied to the data (efficient for short messages). + + + + + A fixed-length (little-endian) length prefix is applied to the data (useful for compatibility). + + + + + A fixed-length (big-endian) length prefix is applied to the data (useful for compatibility). + + + + + Indicates that a type is defined for protocol-buffer serialization. + + + + + Gets or sets the defined name of the type. This can be fully qualified , for example .foo.bar.someType if required. + + + + + Gets or sets the file that defines this type (as used with import in .proto) + + + + + Gets or sets the fist offset to use with implicit field tags; + only uesd if ImplicitFields is set. + + + + + If specified, alternative contract markers (such as markers for XmlSerailizer or DataContractSerializer) are ignored. + + + + + If specified, do NOT treat this type as a list, even if it looks like one. + + + + + Gets or sets the mechanism used to automatically infer field tags + for members. This option should be used in advanced scenarios only. + Please review the important notes against the ImplicitFields enumeration. + + + + + Enables/disables automatic tag generation based on the existing name / order + of the defined members. This option is not used for members marked + with ProtoMemberAttribute, as intended to provide compatibility with + WCF serialization. WARNING: when adding new fields you must take + care to increase the Order for new elements, otherwise data corruption + may occur. + + If not explicitly specified, the default is assumed from Serializer.GlobalOptions.InferTagFromName. + + + + Has a InferTagFromName value been explicitly set? if not, the default from the type-model is assumed. + + + + + Specifies an offset to apply to [DataMember(Order=...)] markers; + this is useful when working with mex-generated classes that have + a different origin (usually 1 vs 0) than the original data-contract. + + This value is added to the Order of each member. + + + + + If true, the constructor for the type is bypassed during deserialization, meaning any field initializers + or other initialization code is skipped. + + + + + Should this type be treated as a reference by default? Please also see the implications of this, + as recorded on ProtoMemberAttribute.AsReference + + + + + Indicates whether this type should always be treated as a "group" (rather than a string-prefixed sub-message) + + + + + Gets or sets a value indicating whether unknown sub-types should cause serialization failure + + + + + Applies only to enums (not to DTO classes themselves); gets or sets a value indicating that an enum should be treated directly as an int/short/etc, rather + than enforcing .proto enum rules. This is useful *in particul* for [Flags] enums. + + + + + Defines a surrogate type used for serialization/deserialization purpose. + + + + + Defines a serializer to use for this type; the serializer must implement ISerializer-T for this type + + + + + Indicates that a static member should be considered the same as though + were an implicit / explicit conversion operator; in particular, this + is useful for conversions that operator syntax does not allow, such as + to/from interface types. + + + + + Used to define protocol-buffer specific behavior for + enumerated values. + + + + + Gets or sets the specific value to use for this enum during serialization. + + + + + Indicates whether this instance has a customised value mapping + + true if a specific value is set + + + + Gets or sets the defined name of the enum, as used in .proto + (this name is not used during serialization). + + + + + Indicates an error during serialization/deserialization of a proto stream. + + + + Creates a new ProtoException instance. + + + Creates a new ProtoException instance. + + + Creates a new ProtoException instance. + + + Creates a new ProtoException instance. + + + + Indicates that a member should be excluded from serialization; this + is only normally used when using implict fields. + + + + + Indicates that a member should be excluded from serialization; this + is only normally used when using implict fields. This allows + ProtoIgnoreAttribute usage + even for partial classes where the individual members are not + under direct control. + + + + + Creates a new ProtoPartialIgnoreAttribute instance. + + Specifies the member to be ignored. + + + + The name of the member to be ignored. + + + + + Indicates the known-types to support for an individual + message. This serializes each level in the hierarchy as + a nested message to retain wire-compatibility with + other protocol-buffer implementations. + + + + + Creates a new instance of the ProtoIncludeAttribute. + + The unique index (within the type) that will identify this data. + The additional type to serialize/deserialize. + + + + Creates a new instance of the ProtoIncludeAttribute. + + The unique index (within the type) that will identify this data. + The additional type to serialize/deserialize. + + + + Gets the unique index (within the type) that will identify this data. + + + + + Gets the additional type to serialize/deserialize. + + + + + Gets the additional type to serialize/deserialize. + + + + + Specifies whether the inherited type's sub-message should be + written with a length-prefix (default), or with group markers. + + + + + Controls the formatting of elements in a dictionary, and indicates that + "map" rules should be used: duplicates *replace* earlier values, rather + than throwing an exception + + + + + Describes the data-format used to store the key + + + + + Describes the data-format used to store the value + + + + + Disables "map" handling; dictionaries will use ".Add(key,value)" instead of "[key] = value", + which means duplicate keys will cause an exception (instead of retaining the final value); if + a proto schema is emitted, it will be produced using "repeated" instead of "map" + + + + + Declares a member to be used in protocol-buffer serialization, using + the given Tag. A DataFormat may be used to optimise the serialization + format (for instance, using zigzag encoding for negative numbers, or + fixed-length encoding for large values. + + + + + Compare with another ProtoMemberAttribute for sorting purposes + + + + + Compare with another ProtoMemberAttribute for sorting purposes + + + + + Creates a new ProtoMemberAttribute instance. + + Specifies the unique tag used to identify this member within the type. + + + + Gets or sets the original name defined in the .proto; not used + during serialization. + + + + + Gets or sets the data-format to be used when encoding this value. + + + + + Gets the unique tag used to identify this member within the type. + + + + + Gets or sets a value indicating whether this member is mandatory. + + + + + Gets a value indicating whether this member is packed. + This option only applies to list/array data of primitive types (int, double, etc). + + + + + Indicates whether this field should *replace* existing values (the default is false, meaning *append*). + This option only applies to list/array data. + + + + + Enables full object-tracking/full-graph support. + + + + + Embeds the type information into the stream, allowing usage with types not known in advance. + + + + + Gets or sets a value indicating whether this member is packed (lists/arrays). + + + + + Additional (optional) settings that control serialization of members + + + + + Default; no additional options + + + + + Indicates that repeated elements should use packed (length-prefixed) encoding + + + + + Indicates that the given item is required + + + + + Enables full object-tracking/full-graph support + + + + + Embeds the type information into the stream, allowing usage with types not known in advance + + + + + Indicates whether this field should *replace* existing values (the default is false, meaning *append*). + This option only applies to list/array data. + + + + + Determines whether the types AsReferenceDefault value is used, or whether this member's AsReference should be used + + + + + Declares a member to be used in protocol-buffer serialization, using + the given Tag and MemberName. This allows ProtoMemberAttribute usage + even for partial classes where the individual members are not + under direct control. + A DataFormat may be used to optimise the serialization + format (for instance, using zigzag encoding for negative numbers, or + fixed-length encoding for large values. + + + + + Creates a new ProtoMemberAttribute instance. + + Specifies the unique tag used to identify this member within the type. + Specifies the member to be serialized. + + + + The name of the member to be serialized. + + + + + A stateful reader, used to read a protobuf stream. Typical usage would be (sequentially) to call + ReadFieldHeader and (after matching the field) an appropriate Read* method. + + + + + Gets the number of the field being processed. + + + + + Indicates the underlying proto serialization format on the wire. + + + + + Gets / sets a flag indicating whether strings should be checked for repetition; if + true, any repeated UTF-8 byte sequence will result in the same String instance, rather + than a second instance of the same string. Disabled by default. Note that this uses + a custom interner - the system-wide string interner is not used. + + + + + Initialize the reader + + + + + Addition information about this deserialization operation. + + + + + Addition information about this deserialization operation. + + + + + Releases resources used by the reader, but importantly does not Dispose the + underlying stream; in many typical use-cases the stream is used for different + processes, so it is assumed that the consumer will Dispose their stream separately. + + + + + Returns the position of the current reader (note that this is not necessarily the same as the position + in the underlying stream, if multiple readers are used on the same stream) + + + + + Returns the position of the current reader (note that this is not necessarily the same as the position + in the underlying stream, if multiple readers are used on the same stream) + + + + + Reads a signed 16-bit integer from the stream: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads an unsigned 16-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads an unsigned 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads a signed 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads an unsigned 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads a signed 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads a signed 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads a string from the stream (using UTF8); supported wire-types: String + + + + + Throws an exception indication that the given value cannot be mapped to an enum. + + + + + Reads a double-precision number from the stream; supported wire-types: Fixed32, Fixed64 + + + + + Reads (merges) a sub-message from the stream, internally calling StartSubItem and EndSubItem, and (in between) + parsing the message in accordance with the model associated with the reader + + + + + Makes the end of consuming a nested message in the stream; the stream must be either at the correct EndGroup + marker, or all fields of the sub-message must have been consumed (in either case, this means ReadFieldHeader + should return zero) + + + + + Begins consuming a nested message in the stream; supported wire-types: StartGroup, String + + The token returned must be help and used when callining EndSubItem + + + + Reads a field header from the stream, setting the wire-type and retuning the field number. If no + more fields are available, then 0 is returned. This methods respects sub-messages. + + + + + Looks ahead to see whether the next field in the stream is what we expect + (typically; what we've just finished reading - for example ot read successive list items) + + + + + Get the TypeModel associated with this reader + + + + + Compares the streams current wire-type to the hinted wire-type, updating the reader if necessary; for example, + a Variant may be updated to SignedVariant. If the hinted wire-type is unrelated then no change is made. + + + + + Verifies that the stream's current wire-type is as expected, or a specialized sub-type (for example, + SignedVariant) - in which case the current wire-type is updated. Otherwise an exception is thrown. + + + + + Discards the data for the current field. + + + + + Reads an unsigned 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads a single-precision number from the stream; supported wire-types: Fixed32, Fixed64 + + + + + Reads a boolean value from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads a byte-sequence from the stream, appending them to an existing byte-sequence (which can be null); supported wire-types: String + + + + + Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length + reader to be created. + + + + + Reads a little-endian encoded integer. An exception is thrown if the data is not all available. + + + + + Reads a big-endian encoded integer. An exception is thrown if the data is not all available. + + + + + Reads a varint encoded integer. An exception is thrown if the data is not all available. + + + + + Reads a string (of a given lenth, in bytes) directly from the source into a pre-existing buffer. An exception is thrown if the data is not all available. + + + + + Reads a given number of bytes directly from the source. An exception is thrown if the data is not all available. + + + + + Reads a string (of a given lenth, in bytes) directly from the source. An exception is thrown if the data is not all available. + + + + + Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length + reader to be created. + + + + + Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length + reader to be created. + + + + Read a varint if possible + The number of bytes consumed; 0 if no data available + + + + Copies the current field into the instance as extension data + + + + + Indicates whether the reader still has data remaining in the current sub-item, + additionally setting the wire-type for the next field if there is more data. + This is used when decoding packed data. + + + + + Reads a Type from the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String + + + + + Merge two objects using the details from the current reader; this is used to change the type + of objects when an inheritance relationship is discovered later than usual during deserilazation. + + + + + Holds state used by the deserializer + + + + + Creates a new reader against a multi-segment buffer + + The source buffer + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + + + + Creates a new reader against a multi-segment buffer + + The source buffer + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + + + + Release any resources associated with this instance + + + + + Reads an unsigned 16-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads a signed 16-bit integer from the stream: Variant, Fixed32, Fixed64, SignedVariant + + + + + Returns the position of the current reader (note that this is not necessarily the same as the position + in the underlying stream, if multiple readers are used on the same stream) + + + + + Reads an unsigned 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads a signed 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads an unsigned 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads a signed 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads a signed 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Reads a double-precision number from the stream; supported wire-types: Fixed32, Fixed64 + + + + + Reads a single-precision number from the stream; supported wire-types: Fixed32, Fixed64 + + + + + Reads a boolean value from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads an unsigned 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Reads a byte-sequence from the stream, appending them to an existing byte-sequence (which can be null); supported wire-types: String + + + + + Reads a byte-sequence from the stream, appending them to an existing byte-sequence; supported wire-types: String + + + + + Reads a byte-sequence from the stream, appending them to an existing byte-sequence; supported wire-types: String + + + + + Reads a byte-sequence from the stream, appending them to an existing byte-sequence; supported wire-types: String + + + + + Reads a byte-sequence from the stream, appending them to an existing byte-sequence (which can be null); supported wire-types: String + + + + + Tries to read a string-like type directly into a span; if successful, the span + returned indicates the available amount of data; if unsuccessful, an exception + is thrown; this should only be used when there is confidence that the length + is bounded. + + + + + Begins consuming a nested message in the stream; supported wire-types: StartGroup, String + + The token returned must be help and used when callining EndSubItem + + + + Makes the end of consuming a nested message in the stream; the stream must be either at the correct EndGroup + marker, or all fields of the sub-message must have been consumed (in either case, this means ReadFieldHeader + should return zero) + + + + + Reads (merges) a sub-message from the stream, internally calling StartSubItem and EndSubItem, and (in between) + parsing the message in accordance with the model associated with the reader + + + + + Reads a string from the stream (using UTF8); supported wire-types: String + + + + + Verifies that the stream's current wire-type is as expected, or a specialized sub-type (for example, + SignedVariant) - in which case the current wire-type is updated. Otherwise an exception is thrown. + + + + + Discards the data for the current field. + + + + + Reads a field header from the stream, setting the wire-type and retuning the field number. If no + more fields are available, then 0 is returned. This methods respects sub-messages. + + + + + Looks ahead to see whether the next field in the stream is what we expect + (typically; what we've just finished reading - for example ot read successive list items) + + + + + Compares the streams current wire-type to the hinted wire-type, updating the reader if necessary; for example, + a Variant may be updated to SignedVariant. If the hinted wire-type is unrelated then no change is made. + + + + + Throws an exception indication that the given value cannot be mapped to an enum. + + + + + Copies the current field into the instance as extension data + + + + + Copies the current field into the instance as extension data + + + + + Indicates the underlying proto serialization format on the wire. + + + + + Gets / sets a flag indicating whether strings should be checked for repetition; if + true, any repeated UTF-8 byte sequence will result in the same String instance, rather + than a second instance of the same string. Disabled by default. Note that this uses + a custom interner - the system-wide string interner is not used. + + + + + Gets the number of the field being processed. + + + + + Reads a Type from the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String + + + + + Reads a sub-item from the input reader + + + + + Reads a sub-item from the input reader + + + + + Reads a sub-item from the input reader + + + + + Reads a value or sub-item from the input reader + + + + + Reads a value or sub-item from the input reader + + + + + Gets the serializer associated with a specific type + + + + + Reads a sub-item from the input reader + + + + + Deserialize an instance of the provided type + + + + + Gets the serialization context associated with this instance; + + + + + Indicates whether the reader still has data remaining in the current sub-item, + additionally setting the wire-type for the next field if there is more data. + This is used when decoding packed data. + + + + + Create an instance of the provided type, respecting any custom factory rules + + + + + Creates a new reader against a stream + + The source stream + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + The number of bytes to read, or -1 to read until the end of the stream + + + + Get the default state associated with this reader + + + + + Creates a new reader against a stream + + The source stream + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + The number of bytes to read, or -1 to read until the end of the stream + + + + Creates a new reader against a stream + + The source stream + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + The number of bytes to read, or -1 to read until the end of the stream + + + + Creates a new reader against a stream + + The source stream + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + The number of bytes to read, or -1 to read until the end of the stream + + + + Creates a new reader against a stream + + The source stream + The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects + Additional context about this serialization operation + + + + Indicates a reserved field or range + + + + + The start of a numeric field range + + + + + The end of a numeric field range + + + + + A named field reservation + + + + + Creates a new instance of a single number field reservation + + + + + Creates a new instance of a range number field reservation + + + + + Records a comment explaining this reservation + + + + + Creates a new instance of a named field reservation + + + + + Represents an output stream for writing protobuf data. + + Why is the API backwards (static methods with writer arguments)? + See: http://marcgravell.blogspot.com/2010/03/last-will-be-first-and-first-will-be.html + + + + + + Writer state + + + + + Create a new ProtoWriter that tagets a buffer writer + + + + + Writes any uncommitted data to the output + + + + + Writes a string to the stream + + + + + Writes a string to the stream; supported wire-types: String + + + + + Writes a Type to the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String + + + + + Writes a field-header, indicating the format of the next data we plan to write. + + + + + Writes a signed 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes a signed 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes a signed 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes a signed 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes an unsigned 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes a boolean to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes a double-precision number to the stream; supported wire-types: Fixed32, Fixed64 + + + + + Writes a single-precision number to the stream; supported wire-types: Fixed32, Fixed64 + + + + + Writes a signed 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes an unsigned 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes a sub-item to the writer + + + + + Writes a sub-item to the writer + + + + + Writes a sub-item to the writer + + + + + Writes a value or sub-item to the writer + + + + + Writes a value or sub-item to the writer + + + + + Writes a sub-type to the input writer + + + + + Writes a sub-type to the input writer + + + + + Writes a base-type to the input writer + + + + + Gets the serializer associated with a specific type + + + + + The serialization context associated with this instance + + + + + Writes a byte-array to the stream; supported wire-types: String + + + + + Writes a byte-array to the stream; supported wire-types: String + + + + + Writes a byte-array to the stream; supported wire-types: String + + + + + Writes a binary chunk to the stream; supported wire-types: String + + + + + Writes a binary chunk to the stream; supported wire-types: String + + + + + Writes a binary chunk to the stream; supported wire-types: String + + + + + Writes an object to the input writer as a root value; if the + object is determined to be a scalar, it is written as though it were + part of a message with field-number 1 + + + + + Abandon any pending unflushed data + + + + + Used for packed encoding; writes the length prefix using fixed sizes rather than using + buffering. Only valid for fixed-32 and fixed-64 encoding. + + + + + Indicates the start of a nested record. + + The instance to write. + A token representing the state of the stream; this token is given to EndSubItem. + + + + Releases any resources associated with this instance + + + + + Flushes data to the underlying stream, and releases any resources. The underlying stream is *not* disposed + by this operation. + + + + + Indicates the end of a nested record. + + The token obtained from StartubItem. + + + + Copies any extension data stored for the instance to the underlying stream + + + + + Copies any extension data stored for the instance to the underlying stream + + + + + Used for packed encoding; indicates that the next field should be skipped rather than + a field header written. Note that the field number must match, else an exception is thrown + when the attempt is made to write the (incorrect) field. The wire-type is taken from the + subsequent call to WriteFieldHeader. Only primitive types can be packed. + + + + + Used for packed encoding; explicitly reset the packed field marker; this is not required + if using StartSubItem/EndSubItem + + + + + Throws an exception indicating that the given enum cannot be mapped to a serialized value. + + + + + Creates a new writer against a stream + + The destination stream + The model to use for serialization; this can be null, but this will impair the ability to serialize sub-objects + Additional context about this serialization operation + + + + Writes a field-header, indicating the format of the next data we plan to write. + + + + + Writes a byte-array to the stream; supported wire-types: String + + + + + Writes a byte-array to the stream; supported wire-types: String + + + + + Indicates the start of a nested record. + + The instance to write. + The destination. + A token representing the state of the stream; this token is given to EndSubItem. + + + + Indicates the end of a nested record. + + The token obtained from StartubItem. + The destination. + + + + Creates a new writer against a stream + + The model to use for serialization; this can be null, but this will impair the ability to serialize sub-objects + Additional context about this serialization operation + Whether this initialization should impact usage counters (to check for double-usage) + + + + Addition information about this serialization operation. + + + + + Addition information about this serialization operation. + + + + + Writes a sub-item to the input writer + + + + + Writes a sub-item to the input writer + + + + + Abandon any pending unflushed data + + + + + Flushes data to the underlying stream, and releases any resources. The underlying stream is *not* disposed + by this operation. + + + + + Get the TypeModel associated with this writer + + + + + The encoding used by the writer + + + + + Writes a string to the stream; supported wire-types: String + + + + + Writes any buffered data (if possible) to the underlying stream. + + Wwriter state + It is not always possible to fully flush, since some sequences + may require values to be back-filled into the byte-stream. + + + + Writes an unsigned 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes a signed 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes a signed 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes an unsigned 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Writes a signed 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes a signed 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant + + + + + Writes a double-precision number to the stream; supported wire-types: Fixed32, Fixed64 + + + + + Writes a single-precision number to the stream; supported wire-types: Fixed32, Fixed64 + + + + + Throws an exception indicating that the given enum cannot be mapped to a serialized value. + + + + + Writes a boolean to the stream; supported wire-types: Variant, Fixed32, Fixed64 + + + + + Copies any extension data stored for the instance to the underlying stream + + + + + Used for packed encoding; indicates that the next field should be skipped rather than + a field header written. Note that the field number must match, else an exception is thrown + when the attempt is made to write the (incorrect) field. The wire-type is taken from the + subsequent call to WriteFieldHeader. Only primitive types can be packed. + + + + + Used for packed encoding; explicitly reset the packed field marker; this is not required + if using StartSubItem/EndSubItem + + + + + Used for packed encoding; writes the length prefix using fixed sizes rather than using + buffering. Only valid for fixed-32 and fixed-64 encoding. + + + + + Buffer size to use when writing; if non-positive, an internal default is used. + + Not all writer implementations make use of this API + + + + Writes a Type to the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String + + + + + Gets the default state associated with this writer + + + + + Creates a new writer against a stream + + The destination stream + The model to use for serialization; this can be null, but this will impair the ability to serialize sub-objects + Additional context about this serialization operation + + + + Additional information about a serialization operation + + + + + Gets or sets a user-defined object containing additional information about this serialization/deserialization operation. + + + + + A default SerializationContext, with minimal information. + + + + + Gets or sets the source or destination of the transmitted data. + + + + + Convert a SerializationContext to a StreamingContext + + + + + Convert a StreamingContext to a SerializationContext + + + + + Create a StreamingContext from a serialization context + + + + + Creates a frozen SerializationContext from a serialization context + + + + + Provides utility methods for creating enum serializers + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Create an enum serializer for the provided type, which much be a matching enum + + + + + Base type for enum serializers + + + + + Deserialize an enum + + + + + Serialize an enum + + + + + Provides an abstract way of referring to simple range-based + data types as Memory. + + + + + Provides a non-null value from the provided storage. + For many value-types, this will simply return the input value. For + reference-types, the input should be null-coalesced against an + empty value such as Array.Empty(). + + + + + Get the length (in terms of element count) of the provided storage. + + + + + Access a Memory that is the underlying + data held by this storage. + + + + + Resizes (typically: allocates and copies) the provided storage by + the requested additional capacity, returning a memory to *just + the additional portion*). The implementor is responsible for + ensuring that the old values are copied if necessary. + The implementor may choose to recycle the old storage, if + appropriate. + + + + + Provides a memory converter implementation for many common storage kinds. + + + + + Provides the singleton instance for element type . + + + + + Indicates capabilities and behaviors of a serializer + + + + + Base-128 variable-length encoding + + + + + Fixed-length 8-byte encoding + + + + + Length-variant-prefixed encoding + + + + + Indicates the start of a group + + + + + Fixed-length 4-byte encoding + 10 + + + + Denotes a varint that should be interpreted using + zig-zag semantics (so -ve numbers aren't a significant overhead) + + + + + Indicates that the wire-type has been explicitly specified + + + + + Indicates that this data should be treated like a list/array + + + + + Scalars are simple types such as integers, not messages; when written as + a root message, a field-one wrapper is added + + + + + Indicates a type that is a message + + + + + Indicates a type that is both "message" and "scalar"; *at the root only* it will be a message wrapped like a scalar; otherwise, it is + treated as a message; see: DateTime/TimeSpan + + + + + Explicitly disables packed encoding; normally, packed encoding is + used by default when appropriate + + + + + List-like values should clear any existing contents before adding new + + + + + Maps should use dictionary Add rather than overwrite; this means that duplicate keys will cause failure + + + + + Disable recursion checking + + + + + Abstract API capable of serializing/deserializing messages or values + + + + + Deserialize an instance from the supplied writer + + + + + Serialize an instance to the supplied writer + + + + + Indicates the features (including the default wire-type) for this type/serializer + + + + + Provides indirect access to a serializer for a given type + + + + + Gets the actual serializer for the type + + + + + Abstract API capable of measuring values without writing them + + + + + Measure the given value, reporting the required length for the payload (not including the field-header) + + + + + Abstract API capable of serializing/deserializing a sequence of messages or values + + + + + Serialize a sequence of values to the supplied writer + + + + + Deserializes a sequence of values from the supplied reader + + + + + A serializer capable of representing complex objects that may warrant length caching + + + + + The effective that this serializer represents; in the case of + an object hierarchy, this is the base-type. + + + + + Abstract API capable of serializing/deserializing objects as part of a type hierarchy + + + + + Serialize an instance to the supplied writer + + + + + Deserialize an instance from the supplied writer + + + + + Represents the state of an inheritance deserialization operation + + + + + Create a new value, using the provided concrete type if a new instance is required + + + + + Gets or sets the current instance represented + + + + + Ensures that the instance has a value + + + + + Indicates whether an instance currently exists + + + + + Parse the input as a sub-type of the instance + + + + + Specifies a serialization callback to be used when the item is constructed; if the item already exists, the callback is executed immediately + + + + + Abstract API capable of serializing/deserializing complex objects with inheritance + + + + + Create a new instance of the type + + + + + Provides utility methods for creating serializers for repeated data + + + + Create a map serializer that operates on concurrent dictionaries + + + Create a map serializer that operates on dictionaries + + + Create a map serializer that operates on dictionaries + + + Create a map serializer that operates on immutable dictionaries + + + Create a map serializer that operates on immutable dictionaries + + + Create a map serializer that operates on immutable dictionaries + + + + Base class for dictionary-like collection serializers + + + + + Deserializes a sequence of values from the supplied reader + + + + Ensure that the collection is not nil, if required + + + Remove any existing contents from the collection + + + Add new contents to the collection + + + Update the new contents intoto the collection, overwriting existing values + + + + Deserializes a sequence of values from the supplied reader + + + + + ExternalMapSerializer provides a base class for concrete types to inherit from, but only provide the methods for collection management + It does not require changes to internal protobuf-net state handling + + the collection type being provided (e.g. Map for F#) + key to the collection + type of the value held within the collection + + + + Provides utility methods for creating serializers for repeated data + + + + Create a serializer that operates on immutable sets + + + Create a serializer that operates on immutable sets + + + Create a serializer that operates on immutable sets + + + Create a serializer that operates on immutable sets + + + Create a serializer that indicates that a scenario is not supported + + + Create a serializer that indicates that a scenario is not supported + + + Create a serializer that operates on lists + + + Create a serializer that operates on lists + + + Create a serializer that operates on most common collections + + + Create a serializer that operates on most common collections + + + Create a serializer that operates on lists + + + Create a serializer that operates on lists + + + Create a serializer that operates on lists + + + Reverses a range of values + + + Create a serializer that operates on immutable arrays + + + Create a serializer that operates on immutable lists + + + Create a serializer that operates on immutable lists + + + Create a serializer that operates on immutable queues + + + Create a serializer that operates on immutable queues + + + Create a serializer that operates on immutable stacks + + + Create a serializer that operates on immutable stacks + + + Create a serializer that operates on immutable sets + + + Create a serializer that operates on immutable sets + + + Create a serializer that operates on immutable sets + + + + Base class for simple collection serializers + + + + + Serialize a sequence of values to the supplied writer + + + + If possible to do so *cheaply*, return the count of the items in the collection + TryGetCountDefault can be used as a reasonable fallback + + + Applies a range of common strategies for cheaply counting collections + This involves multiple tests and exception handling; if your collection is known to be reliable, you should prefer an exposed .Count or similar + + + + Deserializes a sequence of values from the supplied reader + + + + Ensure that the collection is not nil, if required + + + Remove any existing contents from the collection + + + Add new contents to the collection + + + + ExternalSerializer provides a base class for concrete types to inherit from, but only provide the methods for collection management + It does not require changes to internal protobuf-net state handling + + the collection type being provided (e.g. Map for F#) + type of the value held within the collection + + + + Provides access to cached serializers + + + + + Gets a cached serializer instance for a type, in the context of a given provider + + + + + Not yet implemented + + + + + Used to hold particulars relating to nested objects. This is opaque to the caller - simply + give back the token you are given at the end of an object. + + + + + See object.ToString() + + + + + See object.GetHashCode() + + + + + See object.Equals() + + + + + Provides etension methods to access extended (unknown) fields against an instance + + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned (in "value") is the composed value after merging any duplicated content; + if the value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The effective value of the field, or the default value if not found. + The extensible object to obtain the value from. + The type model to use for deserialization. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + The that holds the fields, in terms of the inheritance model; the same tag key can appear against different type levels for the same instance, with different values. + True if data for the field was present, false otherwise. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + The value returned is the composed value after merging any duplicated content; if the + value is "repeated" (a list), then use GetValues instead. + + The data-type of the field. + The type model to use for deserialization. + The extensible object to obtain the value from. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + The that holds the fields, in terms of the inheritance model; the same tag key can appear against different type levels for the same instance, with different values. + The effective value of the field, or the default value if not found. + + + + Queries an extensible object for an additional (unexpected) data-field for the instance. + Each occurrence of the field is yielded separately, making this usage suitable for "repeated" + (list) fields. + + The extended data is processed lazily as the enumerator is iterated. + The data-type of the field. + The extensible object to obtain the value from. + The type model to use for deserialization. + The field identifier; the tag should not be defined as a known data-field for the instance. + The data-format to use when decoding the value. + The that holds the fields, in terms of the inheritance model; the same tag key can appear against different type levels for the same instance, with different values. + An enumerator that yields each occurrence of the field. + + + + Appends the value as an additional (unexpected) data-field for the instance. + Note that for non-repeated sub-objects, this equates to a merge operation; + for repeated sub-objects this adds a new instance to the set; for simple + values the new value supercedes the old value. + + Note that appending a value does not remove the old value from + the stream; avoid repeatedly appending values for the same field. + The data-type of the field. + The data-format to use when encoding the value. + The model to use for serialization. + The extensible object to append the value to. + The field identifier; the tag should not be defined as a known data-field for the instance. + The value to append. + The that holds the fields, in terms of the inheritance model; the same tag key can appear against different type levels for the same instance, with different values. + + + + Maps a field-number to a type + + + + + A Duration represents a signed, fixed-length span of time represented + as a count of seconds and fractions of seconds at nanosecond + resolution. It is independent of any calendar and concepts like "day" + or "month". It is related to Timestamp in that the difference between + two Timestamp values is a Duration and it can be added or subtracted + from a Timestamp. + + + + + Signed seconds of the span of time. + + + + + Signed fractions of a second at nanosecond resolution of the span of time. + + + + Creates a new Duration with the supplied values + + + Converts a TimeSpan to a Duration + + + Converts a Duration to a TimeSpan + + + Converts a Duration to a TimeSpan + + + Converts a TimeSpan to a Duration + + + + Applies .proto rules to ensure that this value is in the expected ranges + + + + + A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs + + + + + A Timestamp represents a point in time independent of any time zone or local + calendar, encoded as a count of seconds and fractions of seconds at + nanosecond resolution. The count is relative to an epoch at UTC midnight on + January 1, 1970, in the proleptic Gregorian calendar which extends the + Gregorian calendar backwards to year one. + + + + + Represents seconds of UTC time since Unix epoch + + + + + Non-negative fractions of a second at nanosecond resolution. + + + + Creates a new Duration with the supplied values + + + Converts a DateTime to a Timestamp + + + + Applies .proto rules to ensure that this value is in the expected ranges + + + + Converts a Timestamp to a DateTime + + + Converts a Timestamp to a DateTime + + + Converts a DateTime to a Timestamp + + + + The default value for dates that are following google.protobuf.Timestamp semantics + + + + + Indicates the encoding used to represent an individual value in a protobuf stream + + + + + Represents an error condition + + + + + Base-128 variable-length encoding + + + + + Base-128 variable-length encoding + + + + + Fixed-length 8-byte encoding + + + + + Length-variant-prefixed encoding + + + + + Indicates the start of a group + + + + + Indicates the end of a group + + + + + Fixed-length 4-byte encoding + 10 + + + + This is not a formal wire-type in the "protocol buffers" spec, but + denotes a varint that should be interpreted using + zig-zag semantics (so -ve numbers aren't a significant overhead) + + + + + This is not a formal wire-type in the "protocol buffers" spec, but + denotes a varint that should be interpreted using + zig-zag semantics (so -ve numbers aren't a significant overhead) + + + + + Indicates that certain members on a specified are accessed dynamically, + for example through . + + + This allows tools to understand which members are being accessed during the execution + of a program. + + This attribute is valid on members whose type is or . + + When this attribute is applied to a location of type , the assumption is + that the string represents a fully qualified type name. + + If the attribute is applied to a method it's treated as a special case and it implies + the attribute should be applied to the "this" parameter of the method. As such the attribute + should only be used on instance methods of types assignable to System.Type (or string, but no methods + will use it there). + + + + + Initializes a new instance of the class + with the specified member types. + + The types of members dynamically accessed. + + + + Gets the which specifies the type + of members dynamically accessed. + + + + + Specifies the types of members that are dynamically accessed. + + This enumeration has a attribute that allows a + bitwise combination of its member values. + + + + + Specifies no members. + + + + + Specifies the default, parameterless public constructor. + + + + + Specifies all public constructors. + + + + + Specifies all non-public constructors. + + + + + Specifies all public methods. + + + + + Specifies all non-public methods. + + + + + Specifies all public fields. + + + + + Specifies all non-public fields. + + + + + Specifies all public nested types. + + + + + Specifies all non-public nested types. + + + + + Specifies all public properties. + + + + + Specifies all non-public properties. + + + + + Specifies all public events. + + + + + Specifies all non-public events. + + + + + Specifies all members. + + + + diff --git a/UnityPackage/Assets/Plugins/protobuf-net.Core.xml.meta b/UnityPackage/Assets/Plugins/protobuf-net.Core.xml.meta new file mode 100644 index 0000000..b0745e6 --- /dev/null +++ b/UnityPackage/Assets/Plugins/protobuf-net.Core.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f3921c6ebeb9474883c76e35fc8bac5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/protobuf-net.dll b/UnityPackage/Assets/Plugins/protobuf-net.dll new file mode 100644 index 0000000000000000000000000000000000000000..9809fa7c247251046ae4f3e795d6978d9048438e GIT binary patch literal 261120 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
  • %3a$e)i4OBn7D-=cgQEKhfgEt>XE^bQ-3Xh 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 + Pushes a null reference onto the stack. Note that this should only + be used to return a null (or set a variable to null); for null-tests + use BranchIfTrue / BranchIfFalse. + + + + + + Creates a new "using" block (equivalent) around a variable; + the variable must exist, and note that (unlike in C#) it is + the variables *final* value that gets disposed. If you need + *original* disposal, copy your variable first. + + + It is the callers responsibility to ensure that the variable's + scope fully-encapsulates the "using"; if not, the variable + may be re-used (and thus re-assigned) unexpectedly. + + + + + + The type that this serializer is intended to work for. + + + + + Perform the steps necessary to serialize this data. + + The value to be serialized. + Writer state + + + + Perform the steps necessary to deserialize this data. + + The current value, if appropriate. + Reader state + The updated / replacement value. + + + + Indicates whether a Read operation replaces the existing value, or + extends the value. If false, the "value" parameter to Read is + discarded, and should be passed in as null. + + + + + Not all Read operations return a value (although most do); if false no + value should be expected. + + + + Emit the IL necessary to perform the given actions + to serialize this data. + + Details and utilities for the method being generated. + The source of the data to work against; + If the value is only needed once, then LoadValue is sufficient. If + the value is needed multiple times, then note that a "null" + means "the top of the stack", in which case you should create your + own copy - GetLocalWithValue. + + + + Emit the IL necessary to perform the given actions to deserialize this data. + + Details and utilities for the method being generated. + For nested values, the instance holding the values; note + that this is not always provided - a null means not supplied. Since this is always + a variable or argument, it is not necessary to consume this value. + + + + A type model that performs per-assembly auto-compilation + + + + + Create a model that serializes all types from an + assembly specified by type + + + + + Create a model that serializes all types from an + assembly specified by type + + + + + Create a model that serializes all types from an assembly + + + + + Create a model that serializes all types from an assembly + + + + + Gets the instance of this serializer + + + + + + + + + + + Represents the set of serialization callbacks to be used when serializing/deserializing a type. + + + + Called before serializing an instance + + + Called before deserializing an instance + + + Called after serializing an instance + + + Called after deserializing an instance + + + + True if any callback is set, else False + + + + + Describes a named constant integer, i.e. an enum value + + + + + Gets the declared name of this enum member + + + + + Gets the value of this enum member + + + + + Create a new named enum value; the value can be of the expected + enum type, or an appropriate boxed enum value + + + + + Creates a copy of this definition with a different name + + + + + Creates a copy of this definition with a different value + + + + + Converts the declared value in accordance with the provided type + + + + Compare a member to an enum value + + + + + + + + + + + + Compare two enum-member definitions + + + + Indicates whether two values are considered equal. + + + + + Indicates whether two values are considered equal. + + + + + Create an EnumMember instance from an enum value + + + + + Represents a type at runtime for use with protobuf, allowing the field mappings (etc) to be defined + + + + + Get the name of the type being represented + + + + + Gets the base-type for this type + + + + + Gets or sets the for this instance + + + + + When used to compile a model, should public serialization/deserialzation methods + be included for this type? + + + + + Should this type be treated as a reference by default? + + + + + Adds a known sub-type to the inheritance model + + + + + Adds a known sub-type to the inheritance model + + + + + Indicates whether the current type has defined callbacks + + + + + Indicates whether the current type has defined subtypes + + + + + Returns the set of callbacks defined for this type + + + + + Assigns the callbacks to use during serialiation/deserialization. + + The method (or null) called before serialization begins. + The method (or null) called when serialization is complete. + The method (or null) called before deserialization begins (or when a new instance is created during deserialization). + The method (or null) called when deserialization is complete. + The set of callbacks. + + + + Assigns the callbacks to use during serialiation/deserialization. + + The name of the method (or null) called before serialization begins. + The name of the method (or null) called when serialization is complete. + The name of the method (or null) called before deserialization begins (or when a new instance is created during deserialization). + The name of the method (or null) called when deserialization is complete. + The set of callbacks. + + + + Returns the public Type name of this Type used in serialization + + + + + Gets or sets the name of this contract. + + + + + Gets or sets the file that defines this type (as used with import in .proto) + + + + + Designate a factory-method to use to create instances of this type + + + + + Designate a factory-method to use to create instances of this type + + + + + Throws an exception if the type has been made immutable + + + + + The runtime type that the meta-type represents + + + + + Adds a member (by name) to the MetaType + + + + + Adds a member (by name) to the MetaType, returning the ValueMember rather than the fluent API. + This is otherwise identical to Add. + + + + + Gets or sets whether the type should use a parameterless constructor (the default), + or whether the type should skip the constructor completely. This option is not supported + on compact-framework. + + + + + The concrete type to create when a new instance of this type is needed; this may be useful when dealing + with dynamic proxies, or with interface-based APIs + + + + + Adds a member (by name) to the MetaType + + + + + Performs serialization of this type via a surrogate; all + other serialization options are ignored and handled + by the surrogate's configuration. + + + + + Adds a set of members (by name) to the MetaType + + + + + Adds a member (by name) to the MetaType + + + + + Adds a member (by name) to the MetaType, including an itemType and defaultType for representing lists + + + + + Adds a member (by name) to the MetaType, including an itemType and defaultType for representing lists, returning the ValueMember rather than the fluent API. + This is otherwise identical to Add. + + + + + Returns the ValueMember that matchs a given field number, or null if not found + + + + + Returns the ValueMember that matchs a given member (property/field), or null if not found + + + + + Returns the ValueMember instances associated with this type + + + + + Returns the EnumMember instances associated with this type + + + + + Add a new defined name/value pair for an enum + + + + + Returns the SubType instances associated with this type + + + + + Compiles the serializer for this type; this is *not* a full + standalone compile, but can significantly boost performance + while allowing additional types to be added. + + An in-place compile can access non-public types / members + + + + Gets or sets a value indicating that an enum should be treated directly as an int/short/etc, rather + than enforcing .proto enum rules. This is useful *in particul* for [Flags] enums. + + + + + Gets or sets a value indicating that this type should NOT be treated as a list, even if it has + familiar list-like characteristics (enumerable, add, etc) + + + + + Gets or sets a value indicating whether unknown sub-types should cause serialization failure + + + + + Specify a custom serializer for this type + + + + + Indicates whether this type should always be treated as a "group" (rather than a string-prefixed sub-message) + + + + + Apply a shift to all fields (and sub-types) on this type + + The change in field number to apply + The resultant field numbers must still all be considered valid + + + + Adds a single number field reservation + + + + + Adds range number field reservation + + + + + Adds a named field reservation + + + + + Provides protobuf serialization support for a number of types that can be defined at runtime + + + + + Ensures that RuntimeTypeModel has been initialized, in advance of using methods on . + + + + + Specifies optional behaviors associated with this model + + + + + Global default that + enables/disables automatic tag generation based on the existing name / order + of the defined members. See + for usage and important warning / explanation. + You must set the global default before attempting to serialize/deserialize any + impacted type. + + + + + Global default that determines whether types are considered serializable + if they have [DataContract] / [XmlType]. With this enabled, ONLY + types marked as [ProtoContract] are added automatically. + + + + + + Global switch that enables or disables the implicit + handling of "zero defaults"; meanning: if no other default is specified, + it assumes bools always default to false, integers to zero, etc. + + + If this is disabled, no such assumptions are made and only *explicit* + default values are processed. This is enabled by default to + preserve similar logic to v1. + + + + + + Global switch that determines whether types with a .ToString() and a Parse(string) + should be serialized as strings. + + + + + Global switch that determines whether DateTime serialization should include the Kind of the date/time. + + + + + Should zero-length packed arrays be serialized? (this is the v2 behavior, but skipping them is more efficient) + + + + + Should root-values allow "packed" encoding? (v2 does not support this) + + + + + Global switch that determines whether a single instance of the same string should be used during deserialization. + + Note this does not use the global .NET string interner + + + + The default model, used to support ProtoBuf.Serializer + + + + + Returns a sequence of the Type instances that can be + processed by this model. + + + + + Gets or sets the default for this model. + + + + + + + + Obtains the MetaType associated with a given Type for the current model, + allowing additional configuration. + + + + + Like the non-generic Add(Type); for convenience + + + + + Adds support for an additional type in this model, optionally + applying inbuilt patterns. If the type is already known to the + model, the existing type is returned **without** applying + any additional behaviour. + + Inbuilt patterns include: + [ProtoContract]/[ProtoMember(n)] + [DataContract]/[DataMember(Order=n)] + [XmlType]/[XmlElement(Order=n)] + [On{Des|S}erializ{ing|ed}] + ShouldSerialize*/*Specified + + The type to be supported + Whether to apply the inbuilt configuration patterns (via attributes etc), or + just add the type with no additional configuration (the type must then be manually configured). + The MetaType representing this type, allowing + further configuration. + + + + Adds support for an additional type in this model, optionally + applying inbuilt patterns. If the type is already known to the + model, the existing type is returned **without** applying + any additional behaviour. + + Inbuilt patterns include: + [ProtoContract]/[ProtoMember(n)] + [DataContract]/[DataMember(Order=n)] + [XmlType]/[XmlElement(Order=n)] + [On{Des|S}erializ{ing|ed}] + ShouldSerialize*/*Specified + + The type to be supported + Whether to apply the inbuilt configuration patterns (via attributes etc), or + just add the type with no additional configuration (the type must then be manually configured). + The to assume for this type; this should usually be omitted + The MetaType representing this type, allowing + further configuration. + + + + Raised before a type is auto-configured; this allows the auto-configuration to be electively suppressed + + This callback should be fast and not involve complex external calls, as it may block the model + + + + Raised after a type is auto-configured; this allows additional external customizations + + This callback should be fast and not involve complex external calls, as it may block the model + + + + Should serializers be compiled on demand? It may be useful + to disable this for debugging purposes. + + + + + Should support for unexpected types be added automatically? + If false, an exception is thrown when unexpected types + are encountered. + + + + + Verifies that the model is still open to changes; if not, an exception is thrown + + + + + Prevents further changes to this model + + + + Resolve a service relative to T + + + Indicates whether a type is known to the model + + + + See Object.ToString + + + + + Compiles the serializers individually; this is *not* a full + standalone compile, but can significantly boost performance + while allowing additional types to be added. + + An in-place compile can access non-public types / members + + + + Represents configuration options for compiling a model to + a standalone assembly. + + + + + Import framework options from an existing type + + + + + The TargetFrameworkAttribute FrameworkName value to burn into the generated assembly + + + + + The TargetFrameworkAttribute FrameworkDisplayName value to burn into the generated assembly + + + + + The name of the TypeModel class to create + + + + + The path for the new dll + + + + + The runtime version for the generated assembly + + + + + The runtime version for the generated assembly + + + + + The Version baked into the generated assembly. + + + + + The acecssibility of the generated serializer + + + + + Implements a filter for use when generating models from assemblies + + + + + Type accessibility + + + + + Available to all callers + + + + + Available to all callers in the same assembly, or assemblies specified via [InternalsVisibleTo(...)] + + + + + Fully compiles the current model into a static-compiled serialization dll + (the serialization dll still requires protobuf-net for support services). + + A full compilation is restricted to accessing public types / members + An instance of the newly created compiled type-model + + + + The amount of time to wait if there are concurrent metadata access operations + + + + + If a lock-contention is detected, this event signals the *owner* of the lock responsible for the blockage, indicating + what caused the problem; this is only raised if the lock-owning code successfully completes. + + + + + Designate a factory-method to use to create instances of any type; note that this only affect types seen by the serializer *after* setting the factory. + + + + + Creates a new runtime model, to which the caller + can add support for a range of types. A model + can be used "as is", or can be compiled for + optimal performance. + + The logical name of this model + + + + Create a model that serializes all types from an + assembly specified by type + + + + + Create a model that serializes all types from an + assembly specified by type + + + + + Create a model that serializes all types from an assembly + + + + + Promotes this model instance to be the default model; the default model is used by and . + + + + + Treat all values of (non-serializable) + as though they were the surrogate (serializable); + if custom conversion operators are provided, they are used in place of implicit + or explicit conversion operators. + + The non-serializable type to provide custom support for + The serializable type that should be used instead + Custom conversion operation + Custom conversion operation + The to use + The to assume for this type + The original model (for chaining). + + + + Add an externally defined serialiser + + type of the collectionn e.g. F# Map + type of the External Serializer + + + + + Contains the stack-trace of the owning code when a lock-contention scenario is detected + + + + + The stack-trace of the code that owned the lock when a lock-contention scenario occurred + + + + + Event-type that is raised when a lock-contention scenario is detected + + + + + Represents an inherited type in a type hierarchy. + + + + + The field-number that is used to encapsulate the data (as a nested + message) for the derived dype. + + + + + The sub-type to be considered. + + + + + Creates a new SubType instance. + + The field-number that is used to encapsulate the data (as a nested + message) for the derived dype. + The sub-type to be considered. + Specific encoding style to use; in particular, Grouped can be used to avoid buffering, but is not the default. + + + + Event data associated with new types being added to a model + + + + + Whether or not to apply the default mapping behavior + + + + + The configuration of the type being added + + + + + The type that was added to the model + + + + + The model that is being changed + + + + + Represents a member (property/field) that is mapped to a protobuf field + + + + + The number that identifies this member in a protobuf stream + + + + + Gets the member (field/property) which this member relates to. + + + + + Gets the backing member (field/property) which this member relates to + + + + + Within a list / array / etc, the type of object for each item in the list (especially useful with ArrayList) + + + + + The underlying type of the member + + + + + For abstract types (IList etc), the type of concrete object to create (if required) + + + + + The type the defines the member + + + + + The default value of the item (members with this value will not be serialized) + + + + + Gets or sets the of this member; by default this is inherited from + the type; when is used with , + the member is considered . + + + + + Creates a new ValueMember instance + + + + + Creates a new ValueMember instance + + + + + Specifies the rules used to process the field; this is used to determine the most appropriate + wite-type, but also to describe subtypes within that wire-type (such as SignedVariant) + + + + + Indicates whether this field should follow strict encoding rules; this means (for example) that if a "fixed32" + is encountered when "variant" is defined, then it will fail (throw an exception) when parsing. Note that + when serializing the defined type is always used. + + + + + Indicates whether this field should use packed encoding (which can save lots of space for repeated primitive values). + This option only applies to list/array data of primitive types (int, double, etc). + + + + + Indicates whether this field should *replace* existing values (the default is false, meaning *append*). + This option only applies to list/array data. + + + + + Indicates whether this field is mandatory. + + + + + Enables full object-tracking/full-graph support. + + + + + Embeds the type information into the stream, allowing usage with types not known in advance. + + + + + Indicates that the member should be treated as a protobuf Map + + + + + Specifies the data-format that should be used for the key, when IsMap is enabled + + + + + Specifies the data-format that should be used for the value, when IsMap is enabled + + + + + Specifies methods for working with optional data members. + + Provides a method (null for none) to query whether this member should + be serialized; it must be of the form "bool {Method}()". The member is only serialized if the + method returns true. + Provides a method (null for none) to indicate that a member was + deserialized; it must be of the form "void {Method}(bool)", and will be called with "true" + when data is found. + + + + Gets the logical name for this member in the schema (this is not critical for binary serialization, but may be used + when inferring a schema). + + + + + Should lists have extended support for null values? Note this makes the serialization less efficient. + + + + + Provides protocol-buffer serialization capability for concrete, attributed types. This + is a *default* model, but custom serializer models are also supported. + + + Protocol-buffer serialization is a compact binary format, designed to take + advantage of sparse data and knowledge of specific data types; it is also + extensible, allowing a type to be deserialized / merged even if some data is + not recognised. + + + + + Suggest a .proto definition for the given type + + The type to generate a .proto definition for + The .proto definition as a string + + + + Suggest a .proto definition for the given type + + The type to generate a .proto definition for + The .proto definition as a string + + + + Suggest a .proto definition for the given type + + The .proto definition as a string + + + + Create a deep clone of the supplied instance; any sub-items are also cloned. + + + + + Create a deep clone of the supplied instance; any sub-items are also cloned. + + + + + Calculates the length of a protocol-buffer payload for an item + + + + + Applies a protocol-buffer stream to an existing instance. + + The type being merged. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Serializes a given instance and deserializes it as a different type; + this can be used to translate between wire-compatible objects (where + two .NET types represent the same data), or to promote/demote a type + through an inheritance hierarchy. + + No assumption of compatibility is made between the types. + The type of the object being copied. + The type of the new object to be created. + The existing instance to use as a template. + A new instane of type TNewType, with the data from TOldType. + + + + Applies a protocol-buffer from an XmlReader to an existing instance. + + The type being merged. + The existing instance to be modified (cannot be null). + The XmlReader containing the data to apply to the instance (cannot be null). + + + + Applies a protocol-buffer from a SerializationInfo to an existing instance. + + The type being merged. + The existing instance to be modified (cannot be null). + The SerializationInfo containing the data to apply to the instance (cannot be null). + + + + Applies a protocol-buffer from a SerializationInfo to an existing instance. + + The type being merged. + The existing instance to be modified (cannot be null). + The SerializationInfo containing the data to apply to the instance (cannot be null). + Additional information about this serialization operation. + + + + Precompiles the serializer for a given type. + + + + + Creates a new IFormatter that uses protocol-buffer [de]serialization. + + The type of object to be [de]deserialized by the formatter. + A new IFormatter to be used during [de]serialization. + + + + Reads a sequence of consecutive length-prefixed items from a stream, using + either base-128 or fixed-length prefixes. Base-128 prefixes with a tag + are directly comparable to serializing multiple items in succession + (use the tag to emulate the implicit behavior + when serializing a list/array). When a tag is + specified, any records with different tags are silently omitted. The + tag is ignored. The tag is ignored for fixed-length prefixes. + + The type of object to deserialize. + The binary stream containing the serialized records. + The prefix style used in the data. + The tag of records to return (if non-positive, then no tag is + expected and all records are returned). + The sequence of deserialized objects. + + + + Creates a new instance from a protocol-buffer stream that has a length-prefix + on data (to assist with network IO). + + The type to be created. + The binary stream to apply to the new instance (cannot be null). + How to encode the length prefix. + A new, initialized instance. + + + + Creates a new instance from a protocol-buffer stream that has a length-prefix + on data (to assist with network IO). + + The type to be created. + The binary stream to apply to the new instance (cannot be null). + How to encode the length prefix. + The expected tag of the item (only used with base-128 prefix style). + A new, initialized instance. + + + + Applies a protocol-buffer stream to an existing instance, using length-prefixed + data - useful with network IO. + + The type being merged. + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + How to encode the length prefix. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + Indicates the number of bytes expected for the next message. + The stream containing the data to investigate for a length. + The algorithm used to encode the length. + The length of the message, if it could be identified. + True if a length could be obtained, false otherwise. + + + Indicates the number of bytes expected for the next message. + The buffer containing the data to investigate for a length. + The offset of the first byte to read from the buffer. + The number of bytes to read from the buffer. + The algorithm used to encode the length. + The length of the message, if it could be identified. + True if a length could be obtained, false otherwise. + + + + The field number that is used as a default when serializing/deserializing a list of objects. + The data is treated as repeated message with field number 1. + + + + + Provides non-generic access to the default serializer. + + + + + Create a deep clone of the supplied instance; any sub-items are also cloned. + + + + + Writes a protocol-buffer representation of the given instance to the supplied stream. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + + + + Creates a new instance from a protocol-buffer stream + + The type to be created. + The binary stream to apply to the new instance (cannot be null). + A new, initialized instance. + + + + Creates a new instance from a protocol-buffer stream + + + + + Creates a new instance from a protocol-buffer stream + + + + + Creates a new instance from a protocol-buffer stream + + + + + Creates a new instance from a protocol-buffer stream + + + + Applies a protocol-buffer stream to an existing instance. + The existing instance to be modified (cannot be null). + The binary stream to apply to the instance (cannot be null). + The updated instance + + + + Writes a protocol-buffer representation of the given instance to the supplied stream, + with a length-prefix. This is useful for socket programming, + as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back + from an ongoing stream. + + The existing instance to be serialized (cannot be null). + How to encode the length prefix. + The destination stream to write to. + The tag used as a prefix to each record (only used with base-128 style prefixes). + + + + Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed + data - useful with network IO. + + The existing instance to be modified (can be null). + The binary stream to apply to the instance (cannot be null). + How to encode the length prefix. + Used to resolve types on a per-field basis. + The updated instance; this may be different to the instance argument if + either the original instance was null, or the stream defines a known sub-type of the + original instance. + + + + Indicates whether the supplied type is explicitly modelled by the model + + + + + Precompiles the serializer for a given type. + + + + + Global switches that change the behavior of protobuf-net + + + + + + + + + + Gets or sets the default .proto syntax to be used + + + + + Releases any internal buffers that have been reserved for efficiency; this does not affect any serialization + operations; simply: it can be used (optionally) to release the buffers for garbage collection (at the expense + of having to re-allocate a new buffer for the next operation, rather than re-use prior buffers). + + + + + Maps a field-number to a type + + + + + Creates a new instance from a protocol-buffer stream + + The type to be created. + The binary stream to apply to the new instance (cannot be null). + A new, initialized instance. + + + + Creates a new instance from a protocol-buffer stream + + The type to be created. + A new, initialized instance. + + + + Creates a new instance from a protocol-buffer stream + + The type to be created. + A new, initialized instance. + + + + Creates a new instance from a protocol-buffer stream + + The type to be created. + The binary stream to apply to the new instance (cannot be null). + A new, initialized instance. + + + + Creates a new instance from a protocol-buffer stream + + + + + Creates a new instance from a protocol-buffer stream + + + + + Creates a new instance from a protocol-buffer stream + + + + + Writes a protocol-buffer representation of the given instance to the supplied stream. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + + + + Writes a protocol-buffer representation of the given instance to the supplied stream. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + Additional state for this serialization operation + + + + Writes a protocol-buffer representation of the given instance to the supplied writer. + + The existing instance to be serialized (cannot be null). + The destination stream to write to. + Additional serialization context + + + + Writes a protocol-buffer representation of the given instance to the supplied SerializationInfo. + + The type being serialized. + The existing instance to be serialized (cannot be null). + The destination SerializationInfo to write to. + + + + Writes a protocol-buffer representation of the given instance to the supplied SerializationInfo. + + The type being serialized. + The existing instance to be serialized (cannot be null). + The destination SerializationInfo to write to. + Additional information about this serialization operation. + + + + Writes a protocol-buffer representation of the given instance to the supplied XmlWriter. + + The type being serialized. + The existing instance to be serialized (cannot be null). + The destination XmlWriter to write to. + + + + Writes a protocol-buffer representation of the given instance to the supplied stream, + with a length-prefix. This is useful for socket programming, + as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back + from an ongoing stream. + + The type being serialized. + The existing instance to be serialized (cannot be null). + How to encode the length prefix. + The destination stream to write to. + + + + Writes a protocol-buffer representation of the given instance to the supplied stream, + with a length-prefix. This is useful for socket programming, + as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back + from an ongoing stream. + + The type being serialized. + The existing instance to be serialized (cannot be null). + How to encode the length prefix. + The destination stream to write to. + The tag used as a prefix to each record (only used with base-128 style prefixes). + + + diff --git a/UnityPackage/Assets/Plugins/protobuf-net.xml.meta b/UnityPackage/Assets/Plugins/protobuf-net.xml.meta new file mode 100644 index 0000000..9f9d5bd --- /dev/null +++ b/UnityPackage/Assets/Plugins/protobuf-net.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c73e92135329e5f4f9ba184a3209f1c8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.dll b/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.dll index 91c086b100c9ad507128609f3f5ca51794f21acf..a00b4bfef725490ed4cf0c92cc3f8a4fa138078b 100644 GIT binary patch literal 30720 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μpCF0&tix0OD|4c_y* z_^5B_jDU|;(QD9bB9<=@+#onhu)CxVmq-G>AS{=8IjUSQ+n0&WC`v*z-~VXHM-Q8< zA1D8o213^^@0b)=OyBQ zY3@fT>+883`J^1Sxl3~0x9e4Uhd zL{k4Cc(>piK<=kc8PIq9FOU9iAM(s_*#*K(ypzRgyG>5>Vt-=h2{E&<>oWTWG4s<% zVLudR(>P%-3Cp4B!VU-v(E^m3N68${mq*KmJs~Wgc&O*mHiuy}Fw6 zhutG=hr{j__N>DmrwuBPCMzy4pZ3yDq;^4#u&B{7VgK}K_7`ClPTGg0FrW`wW4+s9 z`BzDMAvo5{&%HIfgf#m^(jIiuK1FSbu2N&YGhq3dq!~GE*`2z;WgcA*%NbyK!tw%R zy+6RSvTlkaD-bUw)L(Jb6=GRJ1C;{vz~^oX(_rQ4mq&M?m>IZ-J59}LdC{L|DY``! z0$&WV{D{#VSYWXHsnN?CM$ew&t`lHIE?OA!+@>oEZ~md6nJit5{G(bS^ek}H6M7p!8ly7#aIZN=Yje3TVoOQ zhs5(Yi2eUi@Fl?mf*+ZA@cb*!5~NNJu+3qc@jBE3@dzFf%RdO-BY3yqn}Tl$ZiJut zEf)wrEO--IY<|nn(N^<^q#{C?KKwWR6oMswf;z#4VIU}4(n}i0z1oL zKlW?`o26NgBRLAQZ@H5;%-&;oDekbd>^!8c5q4O8W^K2y)@T;UQxB>DZFSgF=BZ$J zx|X}F0NpR_S{mhl*vcV(fQ-n%p0q;rk<0d3dDQI`Nt0L#sE@Gsl-K{7RX~GWcEIXN z!(4X6Dx$N6abzD`J!pew5?OD$-eDYBZ@SsF+-3EqR$)4_zVy1w_E}-d;|P4(K{bF@YD@onrWbdpDJSjhV6J~4UFoDP4R!;&Ml-43Ale~J*KZKr z>#_sZsq~o3j#z`~C&F&^SBLughtjjct`;vt>1APD_x?!xnPyV=3i_49xb7A7Ti0@z zRY7gSblpeL5tr?=M$v~Zd(s+1p9tI5<1aa<`OhG4DYuJ``V8vgvIEvx)YD~0tg+Nz z*tPyG)`RL?8tky!Fy_vsk-`p3oa5+phjE!?APjFu&t;m&15WG*PR= zcuX|W1HyD2R?#C4<2tOO-I}2eXZu&t8!p>rrRaTOdL&;)(@#y;VV|{@?swUf))f@M zjW6maHCjid!gP(+QMt=9GmLDny%4I+WK1Br&TDrxx++|%$ z-xsDM+eAlQw$HkOM&c$n-PT*^a?K>Nt#p+zJ>$00R$)5Mt+d@`2dr)M9hV)kzDW-Y z<2bAQx6tdFNu0OS8xG?*Z>Qh6mb94|coOhDq+fP~f_F3PeLYF;h-9rO3lQ?(M zP+>Z z?Xw=D`&{;<^$0zonMC#|?G>gYdz4;u*#YZudfjD5tRK-qVH{bVe>a(YOXAF`Ciss@6;*dzKan(~&((%UpKAdXAc0cEoyt zt`x?RrTj0^4$Y*^UZGZpab&O1!>;8n>lNB7Oh@(_z2dTc)-UMSE_>4YCB3hiMD_+9 z6Q(13gFbcH0qZR?%eh@R?TGbj$`i(sea-(HI#V-=>>!=vFplgXo$p%ivJTQ>VLGzk z(JGhivkuYqE_>4YJ>8?3MD_uFPneGE1A4?|2dpFXq|1(2f28Myab%nQf2NN#lgK`# zj~&L5eMlyr81OlZd-Fr;DojWAHyY`(ebzr{fyKA|f$lgK`!jly(fpV5sjJ7E2j zZg<%c>o|Q|7?-!*uhheuNo1ya%wZgvsrI^-yDU?^DojUasW)A=&kCr6E_>1ns`oXM z$a2*&VLGy0^{LAaSY4D^!FAWYnXmGM-AYI7UH(E<@3MdMcT>;1>^XmTRe@&*q;91| z=uLl56?NI~{JmAmW!qG-y3%Dw{e9HeUG_JBUv-(2feLlA!^U`%fnn-lm#qtoQ2QNrzIk0>l=`R3z7ZIsaz^OL z&NuH2oUV#pwkvRkI^AJoyblG=RMjrq9XMMxIqZ(m(}8o;PM5tB7^fa`*&BiJYLCly zdnTx795%*#FfdWQ;<7&kCaX6cwl(xo;5-!=sUzDOIv%K0-CgFl&sU``+wYmChB$1D zH{YJFPIuTFs<%B;)w?WW&sLAQY=k{WJ>%v($DXS`a@jPyS}ho*OD{1O+Vj=TE?Z$Q zQ2SlB+Fqz&hrfNfeA>P+&AfaPcUdltfemd%=(2{>#||~jrMYNl;b45PuHo(@KlfJR=Pj5&8|}$@pzHh)4}cbO7$Iw zDen%uUOnNk&&}`J4XVvy=c)(oxXP1fb+^*F>QS%?hn=l<+fAz0Wqa*a>PCnCA^5zV zRCl@THM?2e@37CTx9rQ*e>!ZG|FC_z3gfXRM>fj;p}kH`a@ps0i(26_J9xFa%Vphz z*C_tPl+ITgyiS>T&dDs`9TwcAP7|h2R$ouIQtsn^FMVB&(U!P-IU{(3ny4-P_xc}H zH>hdC4hPus234KqWwTl&OtX4T@bAvsgPHVNBDt#~@PMcv@ASJbTF z7WEB>z3aaqc$3=hu)Y4p!EdM?4jbdG4SrL-shR&dRbbw#4m#{jKeP88R^erK%whNX z=c`-Q#}2y=u3Z+O!_|IPN|;H@gak3gLh=WXeB@$T@~2Q%!=ociE)H*GD_?o@*$ z->v>$!9?&|s@!1%f|r4f){J)e*9GrZl@5C|XI*fITI8^`Nc*+wrFPjdpG@Y+|9AL5Q7ul~FaMK9;K}+WTi>}B zoi*D2f6mOxj{jtG=UQ~u{Qr9W*Q`bV?~QrhmALmGz-oMAIWsmk$r{e3w!8XqSj=*rTzbR>OdoTwi9%9u8u! zH)w#gYPytc&sx^V{`DT(e)rGVr}y#Bs}tw#oGZO=a_ZYb&UH-A8^^-zu7JIIQ|M%%JL_W!rB9Gnd*`_WJ ztOwo{xDKi8;RmS8-JYFlo_RlTVeX?y{Z(K$@Mz#afZq%32mU1ROV6n&>nQNm&~Z;I zEeYkCt@M;tU|vas0!8M{z_I2Yl%?ny!4K%HE=$b!kSmY&&@0vor2g4jWj^De)>H&8 zgNAVrwS_p9@dLWS++#eVazkH(eo)|A^AYu*xm%E`<=oKCqPfHTK;7!uWxh`QB;Xy| zV&$4`DBbeD1I+b)g3=Yu5nLsBRAM_yzfhN%e$1CQync-QBfxyYFumg~;86@sgx-TZ zROAXe40#mf0vangS@cr{r{l9Ne$2tYAr&JU*etkCQa944&|D+(^>iGTo5{q7U$=OYu#voF6h__aF^V9dK5c>P62k>F)1AL550X{*4fO}{N{QSG*+DpTrd4@&< zpQp2+e?j#7X&f}K(qw2bpWyR#Iv<)hX%;kZiRK-uhUOqGga)$>Hf?kXH1AUl@F=Z- zKA^Z>`GS~>koyT%3ZjjnStuA4+$6Y7aJ%46!IuT!62$00t`7wNBG}Ck&w{544ih{> z@M6I_!Bv851vd!p5`08(x8PHPF9`lo@DoAh;Zg#E`GTVa#|u^p&JkQFxK41B;5NbS zf;$DD6?{$bEy4E$KM>3{xvZXo{RB@H90v4Lo#5kwZwdZWu%DMx#|mBy#E24HCwPtE z7QyX;JAr=sftSbO1Hb}0B>KMy{!=jEV?X(VJq7y-Mg{8xR|&2Yyhd;fa1dRMFN6>k|v#1I8;6`-=+l%~^;4`9mPh`{J)QJYiIZ5P=g3kyl5BuyV z*x&OV8l5{{#-V^+t=*eVnO3-88M>}&(lP$xd=`T1= zaFXZ`irgl0sh2HlHTqa?@v*lZf~}%y6YOU_O8s+7@!llt1zQEl&-P)#T0f_@3bqNB z2E<;lB_N&!TeaR6d%-qA3W_(u(jcdf6M2bXt!P>WYjY&8V4GlRu9PL%D%cicO=%a= z3$_Zj36|zbYQCfjwhFchmKKO!VJr3(->xbX+KF7Y!z%144=Ydwe%ED9Vc?_DRrhqHhz8*5%%m#i`kOU$>t6QqAKQm)JRPwx9nFIlC^|{$KNR zEiMf`3)FH&&Wn&=Qa=a2<7XV{Wqi&5E8y)mk=<6uQpd0Xsb%Sof zZyFhR7pxMvgQfv@qGW^aLzxE7(sO|ShEs__KcacSWBBB_fw{8~_*ax~&_^g4-;7m@ zA?K+mFkjU`QvfvZdEFS~BA`LVYB{ivssr{_D}g1d0T@8orM|ro6Ni8ZXsC$Ie7MK`6L38=7CwW0 z6nHZ<7V3LU`RQJ0_zH9=lr9<-$G;KoPSIO@fp{nz>lE` z;?v>BR1W2+qri~*6EII5Q@L~sG`Um?4W1T26Qa|h3DKF*gy?K&y3kB$y3lNBy3kx` z@~9S?JX!`#9<6{TpDu?cpRR-^pVmXu596a8{d_ihuo68q4?Pe?Z?B^5^nKLfS$rD1 zyXvp{d(QGqF=v?%oBPdwn8(fjUbBUt+2C;!{uoDjYvmmwtzqpD@0IdYvLDtR{;RS%H$}bu(7(Oa8ud*>UVmM8zt4Y2`co|Qh_ z38c9RQH{t-7$F%)kIYhy6xFcNG_QKf>2&rvXVBR*;2+SZ7Mc-O)A!yM5K#Hj2S=_5(Wg%wJz?aS@xw=ro>DR8j1g0)YHczVYbdXrMULm`^Qvhzx9j4?R2xl2 z5n~NiPD0hGdTmpTuTGwc@%nm1gkqBA=fxUh2_$j!6QhmXm^8k&R{HO}=DJ#1&Tw|+ zq;pm-UOWM!#D&gsY~z1KNK#zkkf{_4<45~s%+ zm#0>A&V*8`VzHH-6RP7YV~w5Fv*XD+Zj;U_)8osR#}b|O=}O7~M)uTjJ(jC#R>XK@ zoFGf~*zN3aQfyhYxjxk?!I=c*PES{*qK&oDL@hPOQpvPDH`Y`it%*@peI0Nj=2R+H z*~rPD<7-#Tbt%SJdPYi@rzelAOvalN$iN*}9Y4Rh0mHX8h9M@iFdYCnLzpVZH>cur zW635Ar5Mj`s?2o0a4uj%JYJuk{8ZVl)i60yiMT8aGUO)3o7qcs+!5wBH>T{Upn2BJzLy@P6UA`wqWqMpH8#IhqoiXBaEOg1MZ+H~^}`XZ%ENKXK_UFTx$LfZIb zGS;xPe(j7{D#}xMde%XN%I<4V+Jp)^455h*J@U8~s%>;*NcOvZG=#CX%%MBVZg zSxJ@2^sGCPc>}hBwV4EG0&pBCdud%g>YquCx&x$&w+|VS}pPT&RRevC7W~l z)M!#0>+!7R)x4R|wAkA5^;k`6*G`SDj$x8E#Br&ryBvUV7p-S0y*}u1T;6flE=RMw zwpFqEW$n1$$n?^QiA=n~PHwD;*D`UoETP4P&6YGR>)YiQInN$E9;tQ;)-ZOdS@!?6H8zq$O#W;E{Zett6iJtV%uZt0m?T*g? z8I7Le8P4-O!=}{7qp1v?OjhLSq6VlBm6Ggg#W-YxGcN&zELj&~a0^%Owlb7xhic80! z_{BU;>uTy!GH{&Ln43Yiqgjcx##x&viJfO^U1N%B;%IR`UL{ge^t`GSaYxirf^S0c zqYrwZr~9coh9Ao3HELd}W@h{{!Wl5O278G+7$D1_;CiN_b&W~vg|recrx~3lD%Tw( zCr(F%6X`ULUUz~NlwJ%S6{QdlfO9!9@lj-V}=Yq37Ryq2Zp>JL-5{HQ7}=5z4U)$s`a6BhNzE`b|p}@1RyG|8z zkm7x(CaU>Oh@OG#-W7q6DO!h7v;CZh$6N5>h9>2orv_LkZQ7sGVAcEKfnPQ$Dv7sXpGE9Q;s#E~gJZu)`L8 zbV~)fNNx-?t&fbHK3>0@j8a?~Z7tznEa6M8c{-OanF*I1&Xmk~!|7tuvg1?q@QGUc zb1iQ{Q^;RXFJ0$H8wx`Mb7rnW7*z;KnOs>!iVvfs%`qCe^`hK*VG7xn#}XF>_4tm6 zLPebhM*dJAuTDn!1@+!AJJAXRQBcoA-H@?_;(Ww|)b=}L#>N1`uZKXl$wow7EuRGC z_n~iKt%L5C-?GgERRDvukP20y(b*0~=Ubjk`{$W~c7mZy(5zvUKD%bfFORHz6>H9T^q zF~oU{7jmoejLgG`EwaoGk&7SLqXm$`A66v|Z0PS+(6ZC;7c2^hP|#ek$cL%2s9=#r zh5_2_4;u!$uuvfg2t3QV$?##cP^h>V<)QgdK`<;lWI!nxLNoLwFTRG*mrNU?fh#7k zxJN0d3>U_04BAIug6Ixev+OP*H3We6|cC5&GU&B zJWg2JiP)XWv9SM&!s9Ow{mq<~9fU8fn=OQg=lE$F0{}j^YWy&~((d+Fx$2*<{rc1J#=ovVddtq{|EMe48~yp54Qq?8-}=&JkId>ir?T+* zc_Wuk+urx~)mI<<_WNZ<|975^{2g7!T+ZpgWZt_EKldbXV2LK-fK0ZkJ$P)k`vqe`h;O!zZ@m&xy z@g)#4@ySLqyD-EUZe=*mz>n9>A%K>h<*MbnFE|;Mr#I!yX~{ha4GCvGgBucdZcoP! zFCT_qM5-7Po`}bJcn&nSG1i<)MC*ryXXE)+T@4Nra^o|$re@62VI!6;tEnAcTU$G7 zST|K|EIeie-iKrbXmUi?`qSQatq`7j{@619NV$J&YM%_}-fBKQMXlbxKhI_r#BrgcUL+2%H9)H)QI zlPNOCu~V#*HCZG$af`}fN!uZBZYFPTIxp*VUY4@+=5k(bhrGT_UW{5DsNS*M!h9@g z9Wq#%4A?Ss1_(~gw3I^zb`Hl7zvz_SM$#gTVdBpdJxDHyxR9X}BE6|N`E$7oF`__G zp)AH;us6t%k$9p16~@Ll&GdiasUn|{*v#Fj(XKm7Yg zo;-B-4S(LV`Td`6Z+qh2!!6%>|3?oY>G1V8{rzd36HsC{4$+A%2q( z|D!z!(b{qtpl5iTmaz zZ|Zue>$Sf+G&EHMuk=dW@SoJ(GNiUZZ8s@ebX*|~RCJU;VBmtDMLTFXUmu#XGQTy$PtYEf1v zL6(Pv=~25VzVy;X&KO*jb!@;GcC&TJQr=X%l&Yrk+rH!!dLUgWSL~M8Z&`WXmEQ5y zefHn69l@vn9%VV4X6>)Lvh0W!PmCuf)z{C!;|*#^*2ELBm^{sP@*E!kHyxXxy}z%- z_?P13HyB&mo9oXyRNxfWQO|rTUJG^*=}$bchGqVG|9m_XSqz*^b0P6(EM|gN0;fRc zzkfIX{JB2%a_?w~ujex0kB6^bU4#nom{sr^#YmZg=PmVk0#k{nF3a$XLi|@MxvG&G zg*J)wD4xvJA+=G`3BR`Z4xB2)lzC#)+0zqZQ-S9%`rk-=G6rpcPZ#m$lP1Dn1OCO} z6_2%`p8&jD8aI{!PBQ2D_kv_$*G^N0Y?47OfH$f1JK; zW~z#>3-Bo^<<@c%d?u+zo-#GHt5f^3%O#d1Y@>(>ZvnxU+oBeTXU*_ifwev3cRp+q zu+Fs6FnltGUlsD=IErD(ANSw2r{QNAA<4pH0Gw!jDef4GSm5FyW zKEI|AbpmnLqOWTZVRpZ@ZwEaFP#iwB#_iocU&mJO*yg88p7H3HBw}vB=&MJ|gfa5l f_g2SzT;5myYr)nC8?ki{f|Azk?THyZxa4Kc( literal 29696 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 M)W0+SFNwha0pEE8hX4Qo diff --git a/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.pdb b/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.pdb index 79ccf1857e2f30b55d68285ecad1cecde1bb1ed0..11907e6d4cb3ac6138f9b669f24ce044d5d371b6 100644 GIT binary patch delta 6463 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 GiT(v>I_WC_ delta 5904 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 diff --git a/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.xml b/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.xml index 7af4658..99092c6 100644 --- a/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.xml +++ b/UnityPackage/Packages/Net/Plugins/Megumin.MessageStandard.xml @@ -79,6 +79,12 @@ 返回值不考虑泛型,泛型虽然能避免值类型消息装箱,但是调用时要使用反射去转化为 对应类型接口,在rpc回调转型处仍然会有类型匹配失败问题,得不偿失。 + + + 不要使用协变,会导致序列化错误 + + + 序列化函数 @@ -120,18 +126,6 @@ - - - 序列化一个对象到指定writer - - - - - 消息ID - 序列化函数不在提供序列化多少字节,需要在writer中自己统计 - - - 查找消息类型 @@ -177,6 +171,18 @@ + + + 序列化一个对象到指定writer + + + + + 消息ID + 序列化函数不在提供序列化多少字节,需要在writer中自己统计 + + + 反序列化 @@ -246,6 +252,16 @@ + + + 用于反序列化时获取长度 + + + + + 用于反序列化时获取长度 + + 包装成一个长度无限的只写流, @@ -340,6 +356,7 @@ 内置UTF8 string 格式化器,性能低没有优化 + 对动态长度的类型,先用ushort写入总长度,在写入正文,实现复杂类型字段切分。实现复杂类型嵌套序列化。 diff --git a/UnityPackage/Packages/Net/Plugins/Megumin.Remote.dll b/UnityPackage/Packages/Net/Plugins/Megumin.Remote.dll index 0ff4509670fa709912a616163f79f9f99561de38..10cb66884aef91a113a8bacc580eea8c401d36a2 100644 GIT binary patch literal 96256 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

    i)zcxKc=nX%yKR`f_ljT$pHmr<9u60;bRyw`2x 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

    ;XrFE}NsY^B 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 diff --git a/UnityPackage/Packages/Net/Plugins/Megumin.Remote.xml b/UnityPackage/Packages/Net/Plugins/Megumin.Remote.xml index b0e0d6e..4cebddf 100644 --- a/UnityPackage/Packages/Net/Plugins/Megumin.Remote.xml +++ b/UnityPackage/Packages/Net/Plugins/Megumin.Remote.xml @@ -4,21 +4,6 @@ Megumin.Remote - -

    - 测试发送消息 1000个 1024*10消息,多次发送,有几率假死。 - debug发现发送的Kcpdata和接收的Kcpdata对不上。发送一个data,接收到的是旧的数据。 - 新的数据不知道去了那里。感觉像卡在系统的接收数据缓冲里。可能是UDP底层出了问题。 - 有可能是数据量过大IOCP出现了假死,UdpClient.ReceiveAsync异步触发出了问题。 - 实在找不到问题所在。暂时搁置。 - 目前处理方法是使用发送心跳包方式保活。收不到直接就进入断线流程。 - - 工程实践中由于消息是不间断的,总是出现打嗝卡顿,后续消息会触发fastack。假死现象要比测试少一点。 - -
    - - 接收=================================================================== - Kcp测试10000连接没有成功。5000也不性。推测应该是UdpListenner一个端口无法处理这么大流量,大量丢包。 @@ -190,6 +175,8 @@ + protected 改为 public,准备与传输层拆分。protected强行不让别人调用也没啥必要。 + 逻辑流程定义。 这个类用来定义Remote功能需要有哪些必要回调函数。 不定义在是因为这些函数都不应该是public的。 @@ -209,43 +196,7 @@ A:存疑,感觉应该不会,需要测试。异步调用会注册到IOCP线程池中。如果异步接收没收到0字节或者异常,那么对象会一直活着。 - - - 究竟要不要初始化内嵌消息. - - - - - 记录器 - - - - - 当网络连接已经断开, 发送和接受可能有一个没有完全停止。 - todo 这个函数没有处理线程转换 - - - 主动断开还是被动断开 - 主要用于通知外部停止继续发送 - - - - 断开连接之后 - todo 这个函数没有处理线程转换 - - /// - 主动断开还是被动断开 - 可以用于触发重连,并将现有发送缓冲区转移到心得连接中 - - - - 断开连接之后 - todo 这个函数没有处理线程转换 - - /// - 主动断开还是被动断开 - - + 序列化消息 @@ -310,7 +261,7 @@ 个别消息反序列化出现异常不能抛出,防止破环整个网络连接。 - + 发送rpcID和消息 @@ -404,7 +355,7 @@ 处理一个完整的消息包,已分离报头 - + 测试往返时间。 @@ -427,7 +378,7 @@ 一些与RPC支持相关的函数写在这里。 - + 手动内联,少一个异步方法可以节省一些开销。避免生成异步状态机等,可以与DiversionProcess 合成一个。 @@ -454,6 +405,8 @@ Rpc回调注册池 每个session大约每秒30个包,超时时间默认为30秒; + + 写到最后发现本质就是,只不过token是内部自动的,而不是外部传进来的。 @@ -494,7 +447,16 @@ - + + + 收到obj response后,如果是异常,处理异常的逻辑。 + + + + + + + @@ -502,28 +464,17 @@ Q:为什么用IMiniAwaitable 而不是ValueTask? A:开始时这个类直接和Send耦合,需要返回值一致,现在没有修改必要。性能要比ValueTask高那么一丁点。 + + 独立的Rpc层 + - + 原子操作 取得RpcId,发送方的的RpcID为正数,回复的RpcID为负数,正负一一对应 0,int.MinValue 为无效值 - - - 收到obj response后,如果是异常,处理异常的逻辑。 - - - - - - - - - 独立的Rpc层 - - 如果rpcID为负数,是rpc返回回复,返回true,此消息由RpcLayer处理。 @@ -537,14 +488,14 @@ 验证resp空引用和返回类型,补充和转化异常 - + - + 内部Rpc发送,泛型在这一步转为非泛型。 @@ -580,102 +531,211 @@ 安全关闭一个socket很麻烦,根本搞不清楚调用那个函数会抛出异常。 - + + + 创建TCPRemote并开始接收 + + + + + + 要发送的字节块 + + + + + 发送成功 + + + + + 要发送的内存块 + + + + + 要发送的内存块 + + + + + 消息字节写入器 + + + + + 放弃发送,废弃当前写入器 + + + + + 将总长度写入消息4位 + + 消息总长度 + + + + Tcp发送管道 存在并发/异步函数重入问题 + + + + + 当前游标位置 + + + + + 确保当前buffer足够大 + + + + + + 取得一个可用写入器 + + + + + + 取得下一个待发送消息。 + + + + + + 取消正在挂起的ReadNext + + + 会导致Socket发送循环中断,需要重新调用ReadSendPipe。 + 用于断线重连时,将旧的Remote的SendPipe,赋值给新的Remote,并取消旧的Remote的pending。 + + + + + 时间戳同步 + + + + + 实测受到延迟和丢包率影响。延迟对结果影响不大。丢包率在5%误差100ms左右 + count 10-20 interval 50ms-100比较合适 + + + + + + + + + 测试发送消息 1000个 1024*10消息,多次发送,有几率假死。 + debug发现发送的Kcpdata和接收的Kcpdata对不上。发送一个data,接收到的是旧的数据。 + 新的数据不知道去了那里。感觉像卡在系统的接收数据缓冲里。可能是UDP底层出了问题。 + 有可能是数据量过大IOCP出现了假死,UdpClient.ReceiveAsync异步触发出了问题。 + 实在找不到问题所在。暂时搁置。 + 目前处理方法是使用发送心跳包方式保活。收不到直接就进入断线流程。 + + 工程实践中由于消息是不间断的,总是出现打嗝卡顿,后续消息会触发fastack。假死现象要比测试少一点。 + + + + 接收=================================================================== + + 消息报头结构: Lenght(总长度,包含自身报头) [int] [4] + RpcID [int] [4] + CMD [short] [2] + MessageID [int] [4] - + 断开器 file:///W:\Git\Megumin.Net\Doc\如何正确处理网络断开.md https://stackoverflow.com/questions/35229143/what-exactly-do-sockets-shutdown-disconnect-close-and-dispose-do - + 设置为true后,不需要重置为false,因为设计上一个remote只能触发断开一次。 - + 收到0字节 表示远程主动断开连接 - + 接收出现错误 - + 发送出现错误 - + 所有工作停止,不允许Push到发送队列。 - + 正在停止,不允许Push到发送队列,底层停止发送。 - + 正在停止,不允许Push到发送队列,但底层仍可能正在发送。 - + 从未尝试开始 - + 发送接收都正常 - + 当前状态,使用此标记控制 底层发送 底层接收 接收数据处理三个循环正确退出。 - + 明确指定使用IPV4还是IPV6 SocketException: Protocol option not supported http://www.schrankmonster.de/2006/04/26/system-net-sockets-socketexception-protocol-not-supported/ - + 设置Client Socket - + 开始发送接收 TODO,拆分成4个函数 - + 连接保护器,防止多次调用 - + 正在连接 - + 将oldRemote的SendPipe和RpcLayer赋值给当前remote。 @@ -688,175 +748,128 @@ 收发消息后,socket ReceiveAsync已经挂起,socket已经和remote绑定,不能切换socket,所以方法3不成立。 - + 发送管道 发送管道没有涵盖所有案例,尽量不要给外界访问 - + 开始读取发送管道,使用Socket发送消息 - - - 不使用线程同步上下文,全部推送到线程池调用。useSynchronizationContext 用来保证await前后线程一致。 - - FlushAsync后,另一头的触发是通过ThreadPoolScheduler来触发的,不是调用FlushAsync的线程, - 所以useSynchronizationContext = false时,不用担心 IOCP线程 执行pipeReader,反序列化等造成IOCP线程阻塞问题。 - - - useSynchronizationContext 如果为true的话, - 那么pipe read write 异步后续只会在调用线程执行。 - 构造 连接 StartWork调用链通常导致pipe异步后续在unity中会被锁定在主线程。 - https://source.dot.net/#System.IO.Pipelines/System/IO/Pipelines/PipeAwaitable.cs,115 - - - + 不使用线程同步上下文,全部推送到线程池调用。useSynchronizationContext 用来保证await前后线程一致。 FlushAsync后,另一头的触发是通过ThreadPoolScheduler来触发的,不是调用FlushAsync的线程, 所以useSynchronizationContext = false时,不用担心 IOCP线程 执行pipeReader,反序列化等造成IOCP线程阻塞问题。 + -------- + 背压和流量控制,根据项目需要在PipeOptions中设置参数。 + https://www.cnblogs.com/xxfy1/p/9290235.html useSynchronizationContext 如果为true的话, 那么pipe read write 异步后续只会在调用线程执行。 构造 连接 StartWork调用链通常导致pipe异步后续在unity中会被锁定在主线程。 https://source.dot.net/#System.IO.Pipelines/System/IO/Pipelines/PipeAwaitable.cs,115 + https://zhuanlan.zhihu.com/p/39223648 - + 当前socket是不是在接收。 - - - 当前socket是不是在接收。 - - - + 从Socket接收 - + 此方法没有经过测试 - - - 正在处理消息 - - - + 正在处理消息 - + 开始读取接收到的数据 - + - 创建TCPRemote并开始接收 - - - - - - 要发送的字节块 - - - - - 发送成功 - - - - - 要发送的内存块 - - - - - 要发送的内存块 - - - - - 消息字节写入器 - - - - - 放弃发送,废弃当前写入器 - - - - - 将总长度写入消息4位 + + + Unity中必须,明确指定使用IPV4还是IPV6。无论什么平台。可能是mono的问题。 + SocketException: Protocol option not supported + http://www.schrankmonster.de/2006/04/26/system-net-sockets-socketexception-protocol-not-supported/ - 消息总长度 - + - Tcp发送管道 存在并发/异步函数重入问题 + 是不是监听侧Remote - + - 当前游标位置 + 为kcp预留 - + - 确保当前buffer足够大 + 设置Client Socket - + + - + - 取得一个可用写入器 + + + Unity中必须明确指定使用IPV4还是IPV6。无论什么平台。可能是mono的问题。 + + + - + - 取得下一个待发送消息。 + 处理认证 - + + - + - 取消正在挂起的ReadNext + 连接测主动断开,shutdown,先向对面发送一个0字节消息,对面会触发Recv0(不保证对面能收到)。 + 监听侧启动一个计时器保证安全移除。 + 然后关闭自己一侧Socket。 + Udp断开没有使用4次挥手来保证可靠。只是粗略进行断开。大致能用就行了。 - - 会导致Socket发送循环中断,需要重新调用ReadSendPipe。 - 用于断线重连时,将旧的Remote的SendPipe,赋值给新的Remote,并取消旧的Remote的pending。 - + + - + - 时间戳同步 + 网络层实际发送数据位置 + + - + - 实测受到延迟和丢包率影响。延迟对结果影响不大。丢包率在5%误差100ms左右 - count 10-20 interval 50ms-100比较合适 + 主动侧需要手动开启接收,被动侧由listener接收然后分发 - - - - + @@ -896,73 +909,6 @@ - - - - - Unity中必须,明确指定使用IPV4还是IPV6。无论什么平台。可能是mono的问题。 - SocketException: Protocol option not supported - http://www.schrankmonster.de/2006/04/26/system-net-sockets-socketexception-protocol-not-supported/ - - - - - 是不是监听侧Remote - - - - - 为kcp预留 - - - - - 设置Client Socket - - - - - - - - - Unity中必须明确指定使用IPV4还是IPV6。无论什么平台。可能是mono的问题。 - - - - - - - - - 处理认证 - - - - - - - 连接测主动断开,shutdown,先向对面发送一个0字节消息,对面会触发Recv0(不保证对面能收到)。 - 监听侧启动一个计时器保证安全移除。 - 然后关闭自己一侧Socket。 - Udp断开没有使用4次挥手来保证可靠。只是粗略进行断开。大致能用就行了。 - - - - - - - 网络层实际发送数据位置 - - - - - - - 主动侧需要手动开启接收,被动侧由listener接收然后分发 - - - 2018年时IPV4 IPV6 udp中不能混用,不知道现在情况 @@ -1008,12 +954,12 @@ - + 用于主动或被动断开连接后,从查询列表中移除。 - + @@ -1023,6 +969,11 @@ https://source.dot.net/#System.Net.Sockets/System/Net/Sockets/UDPClient.cs,16 + + + Tcp回声远端 + + 主动还是被动 diff --git a/UnityPackage/Packages/Net/Plugins/NetRemoteStandard.dll b/UnityPackage/Packages/Net/Plugins/NetRemoteStandard.dll index e3364c02c03f911216edd4fbfe7abc35b43befe7..ae14aa305e6d7756ec7efb808bed290dcf26775d 100644 GIT binary patch delta 3268 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 ZFyT!aBlBcVmP$s`&CM(irI~@g0{~fnn$7?K delta 522 zcmdns_{3p?N__?c1A}rvN)nJ_cml*Fj6i-J149H80|N_4F1Vy9GcUauBp(A43k_yS z0I~x>^6sIYE7!MAH+TIj;cl?5SvKw$>=_ywGt zA`A>bYZz1+80;8;Yz8d|hk*k~3j#3@lm;o{24Vpq2B`z_VVDibW|??Xniu3skO3eG z(aDUA!u&UZ?B@(j3|fqg3>J(`lMNZy)~f@36U(U1z{=3T?99N-5Y3njCY!st9!xre$z(9u3?>;SCo@e6o@6QZ zt@uK4;{UUZ-5P0}F7c;?jzwxjtDfG~-M_?7u!hSsC^a{~BvmiDm@S5pg+nA-p=M9w zH?~_lSKj=l+R(0Qw^909n5UOhLvrBCYM-u_;s=vknS90!f`s7Vt_m6lJhX%=~C(eIT%}oCBASwB=*5PW7%?~CAu~ageY(B&CP#OT;ICzHu diff --git a/UnityPackage/Packages/Net/Plugins/NetRemoteStandard.xml b/UnityPackage/Packages/Net/Plugins/NetRemoteStandard.xml index ab24f46..77b3cbc 100644 --- a/UnityPackage/Packages/Net/Plugins/NetRemoteStandard.xml +++ b/UnityPackage/Packages/Net/Plugins/NetRemoteStandard.xml @@ -43,6 +43,7 @@ 重试次数,失败会返回最后一次的异常 + 没有timeout参数,可以调用 @@ -87,7 +88,7 @@ 发送任意对象,只要它能被MessageLUT解析。 - + 发送消息,无阻塞立刻返回 调用方 无法了解发送情况 @@ -97,33 +98,72 @@ 参数项,在整个发送管线中传递 序列化开销不大,放在调用线程执行比使用单独的序列化线程更好 - + 可以发送一个消息并期待一个指定类型的返回值 - 为了通用性和框架兼容性,object导致值类型装箱是可以妥协的。 + + 为了通用性和框架兼容性,object message导致值类型装箱是可以妥协的。 + Result已经是泛型了,如果message也使用泛型,则需要使用2个泛型,调用出没办法自动类型推导,需要明确指定,严重影响易用性。 + -------- + 在这里吐槽几句,可能有人觉得这两个API比较像Go。https://www.zhihu.com/question/451484968 + 其实本质含义不一样,设计初衷是禁止异常抛出到Send处。 + 基于异步的业务逻辑应该是顺畅的,不应该写try-catch。总不能每个Send位置都去catch SocketException。 + 但是在网络模块底层拦截所有异常也是不行的,某些业务逻辑有可能需要明确知道异常是什么。 + 所以折衷将异常以返回值的形式传递回调用者处。 + 这里的精髓是,当后续代码读取结果时,结果一定符合预期,如果不符合预期,后续代码则不会被执行。 + 当出现异常时,允许不触发异步延续,后续代码执行全被吃掉,这是Go所不具备的。 + 才是设计的最终目的。 + 而只是对特殊需求的补丁API。 + - + 异步发送消息,封装Rpc过程。 - 期待的Rpc结果类型,如果收到返回类型,但是类型不匹配,返回null + 期待的Rpc结果类型,如果收到返回类型,但是类型不匹配,返回null 发送消息的类型需要序列化 具体实现使用查找表 MessageLUT 中指定ID和序列化函数 参数项,在整个发送管线中传递 需要检测空值 - + 异步发送消息,封装Rpc过程 结果值是保证有值的,如果结果值为空或其他异常,触发异常回调函数,不会抛出异常,所以不用try catch。 异步方法的后续部分不会触发,所以后续部分可以省去空检查。 - ****千万注意,只有在RpcResult有返回值的情况下,后续异步方法才会执行。 + ****千万注意,只有在Result有返回值的情况下,后续异步方法才会执行。 这不是语言特性,也不是语法特性。这由具体实现的类库保证。***** - + + 参数项,在整个发送管线中传递 发生异常时的回调函数 + + + + + + 异步发送消息,封装Rpc过程。 + + 发送消息类型 + 期待的Rpc结果类型,如果收到返回类型,但是类型不匹配,返回null + 发送消息的类型需要序列化 具体实现使用查找表 MessageLUT 中指定ID和序列化函数 + 参数项,在整个发送管线中传递 + 需要检测空值 + + + + 异步发送消息,封装Rpc过程 + 结果值是保证有值的,如果结果值为空或其他异常,触发异常回调函数,不会抛出异常,所以不用try catch。 + 异步方法的后续部分不会触发,所以后续部分可以省去空检查。 + ****千万注意,只有在Result有返回值的情况下,后续异步方法才会执行。 + 这不是语言特性,也不是语法特性。这由具体实现的类库保证。***** + + 发送消息类型 + + 参数项,在整个发送管线中传递 + 发生异常时的回调函数 @@ -156,16 +196,6 @@ - - - 实际连接的Socket - - - - - 当前是否正常工作 - - 监听端多路复用,用于Udp,即一个socket 对应多个远端。 @@ -238,5 +268,27 @@ 不一定所有remote都支持。大多时候用于调试 + + + 传输层标准接口 + + + + + 实际连接的Socket + + + + + 当前是否正常工作 + + + + + 断线重连 + + + + diff --git a/UnityPackage/Packages/Net/Runtime/OpTest.cs b/UnityPackage/Packages/Net/Runtime/OpTest.cs index ea5fa7b..b9e75d3 100644 --- a/UnityPackage/Packages/Net/Runtime/OpTest.cs +++ b/UnityPackage/Packages/Net/Runtime/OpTest.cs @@ -1,15 +1,14 @@ -using Megumin; -using Megumin.Message; -using Megumin.Remote; -using Net.Remote; -using System; +using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; +using Megumin; +using Megumin.Message; +using Megumin.Remote; +using Net.Remote; using TMPro; using UnityEngine; -using UnityEngine.tvOS; public class OpTest : MonoBehaviour { @@ -196,10 +195,7 @@ private async void Connect(T client, int port, IPAddress targetIP) public void Disconnect() { - if (client is IConnectable connectable) - { - connectable.Disconnect(); - } + client.Transport.Disconnect(); } ///

    !rVFS5S0! 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%0D$vBz|a7$oKCxTO1ZH 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 literal 0 HcmV?d00001 diff --git a/UnityPackage/Assets/Plugins/protobuf-net.dll.meta b/UnityPackage/Assets/Plugins/protobuf-net.dll.meta new file mode 100644 index 0000000..20e09a4 --- /dev/null +++ b/UnityPackage/Assets/Plugins/protobuf-net.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4512cde8b12e17e4a9c3cbdf74dca8b8 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityPackage/Assets/Plugins/protobuf-net.xml b/UnityPackage/Assets/Plugins/protobuf-net.xml new file mode 100644 index 0000000..eda8211 --- /dev/null +++ b/UnityPackage/Assets/Plugins/protobuf-net.xml @@ -0,0 +1,1427 @@ + + + + protobuf-net + + + +