]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/thrift/lib/csharp/src/Protocol/TProtocol.cs
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / jaegertracing / thrift / lib / csharp / src / Protocol / TProtocol.cs
1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 *
19 * Contains some contributions under the Thrift Software License.
20 * Please see doc/old-thrift-license.txt in the Thrift distribution for
21 * details.
22 */
23
24 using System;
25 using System.Text;
26 using Thrift.Transport;
27
28 namespace Thrift.Protocol
29 {
30 public abstract class TProtocol : IDisposable
31 {
32 private const int DEFAULT_RECURSION_DEPTH = 64;
33
34 protected TTransport trans;
35 protected int recursionLimit;
36 protected int recursionDepth;
37
38 protected TProtocol(TTransport trans)
39 {
40 this.trans = trans;
41 this.recursionLimit = DEFAULT_RECURSION_DEPTH;
42 this.recursionDepth = 0;
43 }
44
45 public TTransport Transport
46 {
47 get { return trans; }
48 }
49
50 public int RecursionLimit
51 {
52 get { return recursionLimit; }
53 set { recursionLimit = value; }
54 }
55
56 public void IncrementRecursionDepth()
57 {
58 if (recursionDepth < recursionLimit)
59 ++recursionDepth;
60 else
61 throw new TProtocolException(TProtocolException.DEPTH_LIMIT, "Depth limit exceeded");
62 }
63
64 public void DecrementRecursionDepth()
65 {
66 --recursionDepth;
67 }
68
69 #region " IDisposable Support "
70 private bool _IsDisposed;
71
72 // IDisposable
73 public void Dispose()
74 {
75 Dispose(true);
76 }
77
78 protected virtual void Dispose(bool disposing)
79 {
80 if (!_IsDisposed)
81 {
82 if (disposing)
83 {
84 if (trans is IDisposable)
85 (trans as IDisposable).Dispose();
86 }
87 }
88 _IsDisposed = true;
89 }
90 #endregion
91
92 public abstract void WriteMessageBegin(TMessage message);
93 public abstract void WriteMessageEnd();
94 public abstract void WriteStructBegin(TStruct struc);
95 public abstract void WriteStructEnd();
96 public abstract void WriteFieldBegin(TField field);
97 public abstract void WriteFieldEnd();
98 public abstract void WriteFieldStop();
99 public abstract void WriteMapBegin(TMap map);
100 public abstract void WriteMapEnd();
101 public abstract void WriteListBegin(TList list);
102 public abstract void WriteListEnd();
103 public abstract void WriteSetBegin(TSet set);
104 public abstract void WriteSetEnd();
105 public abstract void WriteBool(bool b);
106 public abstract void WriteByte(sbyte b);
107 public abstract void WriteI16(short i16);
108 public abstract void WriteI32(int i32);
109 public abstract void WriteI64(long i64);
110 public abstract void WriteDouble(double d);
111 public virtual void WriteString(string s)
112 {
113 WriteBinary(Encoding.UTF8.GetBytes(s));
114 }
115 public abstract void WriteBinary(byte[] b);
116
117 public abstract TMessage ReadMessageBegin();
118 public abstract void ReadMessageEnd();
119 public abstract TStruct ReadStructBegin();
120 public abstract void ReadStructEnd();
121 public abstract TField ReadFieldBegin();
122 public abstract void ReadFieldEnd();
123 public abstract TMap ReadMapBegin();
124 public abstract void ReadMapEnd();
125 public abstract TList ReadListBegin();
126 public abstract void ReadListEnd();
127 public abstract TSet ReadSetBegin();
128 public abstract void ReadSetEnd();
129 public abstract bool ReadBool();
130 public abstract sbyte ReadByte();
131 public abstract short ReadI16();
132 public abstract int ReadI32();
133 public abstract long ReadI64();
134 public abstract double ReadDouble();
135 public virtual string ReadString()
136 {
137 var buf = ReadBinary();
138 return Encoding.UTF8.GetString(buf, 0, buf.Length);
139 }
140 public abstract byte[] ReadBinary();
141 }
142 }