1 /*
2  * Copyright 2015 The Netty Project
3  *
4  * The Netty Project licenses this file to you under the Apache License,
5  * version 2.0 (the "License"); you may not use this file except in compliance
6  * with the License. You may obtain a copy of the License at:
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" ~BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations
14  * under the License.
15  */
16 module hunt.net.buffer.UnpooledSlicedByteBuf;
17 
18 import hunt.net.buffer.AbstractByteBuf;
19 import hunt.net.buffer.AbstractUnpooledSlicedByteBuf;
20 import hunt.net.buffer.ByteBuf;
21 import hunt.net.buffer.ByteBufAllocator;
22 import hunt.net.buffer.ByteBufUtil;
23 import hunt.net.buffer.ByteProcessor;
24 
25 import hunt.Byte;
26 import hunt.io.ByteBuffer;
27 import hunt.Exceptions;
28 import hunt.net.Exceptions;
29 import hunt.stream.Common;
30 import hunt.util.StringBuilder;
31 
32 import std.conv;
33 import std.format;
34 
35 /**
36  * A special {@link AbstractUnpooledSlicedByteBuf} that can make optimizations because it knows the sliced buffer is of
37  * type {@link AbstractByteBuf}.
38  */
39 class UnpooledSlicedByteBuf : AbstractUnpooledSlicedByteBuf {
40     this(AbstractByteBuf buffer, int index, int length) {
41         super(buffer, index, length);
42     }
43 
44     override
45     int capacity() {
46         return maxCapacity();
47     }
48 
49     override
50     AbstractByteBuf unwrap() {
51         return cast(AbstractByteBuf) super.unwrap();
52     }
53 
54     override
55     protected byte _getByte(int index) {
56         return unwrap()._getByte(idx(index));
57     }
58 
59     override
60     protected short _getShort(int index) {
61         return unwrap()._getShort(idx(index));
62     }
63 
64     override
65     protected short _getShortLE(int index) {
66         return unwrap()._getShortLE(idx(index));
67     }
68 
69     override
70     protected int _getUnsignedMedium(int index) {
71         return unwrap()._getUnsignedMedium(idx(index));
72     }
73 
74     override
75     protected int _getUnsignedMediumLE(int index) {
76         return unwrap()._getUnsignedMediumLE(idx(index));
77     }
78 
79     override
80     protected int _getInt(int index) {
81         return unwrap()._getInt(idx(index));
82     }
83 
84     override
85     protected int _getIntLE(int index) {
86         return unwrap()._getIntLE(idx(index));
87     }
88 
89     override
90     protected long _getLong(int index) {
91         return unwrap()._getLong(idx(index));
92     }
93 
94     override
95     protected long _getLongLE(int index) {
96         return unwrap()._getLongLE(idx(index));
97     }
98 
99     override
100     protected void _setByte(int index, int value) {
101         unwrap()._setByte(idx(index), value);
102     }
103 
104     override
105     protected void _setShort(int index, int value) {
106         unwrap()._setShort(idx(index), value);
107     }
108 
109     override
110     protected void _setShortLE(int index, int value) {
111         unwrap()._setShortLE(idx(index), value);
112     }
113 
114     override
115     protected void _setMedium(int index, int value) {
116         unwrap()._setMedium(idx(index), value);
117     }
118 
119     override
120     protected void _setMediumLE(int index, int value) {
121         unwrap()._setMediumLE(idx(index), value);
122     }
123 
124     override
125     protected void _setInt(int index, int value) {
126         unwrap()._setInt(idx(index), value);
127     }
128 
129     override
130     protected void _setIntLE(int index, int value) {
131         unwrap()._setIntLE(idx(index), value);
132     }
133 
134     override
135     protected void _setLong(int index, long value) {
136         unwrap()._setLong(idx(index), value);
137     }
138 
139     override
140     protected void _setLongLE(int index, long value) {
141         unwrap()._setLongLE(idx(index), value);
142     }
143 }