1 /**
2 * This file is part of Waarp Project.
3 *
4 * Copyright 2009, Frederic Bregier, and individual contributors by the @author tags. See the
5 * COPYRIGHT.txt in the distribution for a full listing of individual contributors.
6 *
7 * All Waarp Project is free software: you can redistribute it and/or modify it under the terms of
8 * the GNU General Public License as published by the Free Software Foundation, either version 3 of
9 * the License, or (at your option) any later version.
10 *
11 * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
12 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
13 * Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along with Waarp . If not, see
16 * <http://www.gnu.org/licenses/>.
17 */
18 package org.waarp.ftp.core.data.handler;
19
20 import io.netty.buffer.ByteBuf;
21
22 /**
23 * SeekAheadData Class used to optimize access to the incoming buffer
24 *
25 * @author Frederic Bregier
26 *
27 */
28 class FtpSeekAheadData {
29 /**
30 * Exception when NO Backend Array is found
31 */
32 static class SeekAheadNoBackArrayException extends Exception {
33 private static final long serialVersionUID = -630418804938699495L;
34 }
35
36 byte[] bytes;
37
38 int readerIndex;
39
40 int pos;
41
42 int limit;
43
44 ByteBuf buffer;
45
46 /**
47 * @param buffer
48 */
49 FtpSeekAheadData(ByteBuf buffer) throws SeekAheadNoBackArrayException {
50 if (!buffer.hasArray()) {
51 throw new SeekAheadNoBackArrayException();
52 }
53 this.buffer = buffer;
54 this.bytes = buffer.array();
55 this.pos = this.readerIndex = buffer.arrayOffset() + buffer.readerIndex();
56 this.limit = buffer.arrayOffset() + buffer.writerIndex();
57 }
58
59 /**
60 *
61 * @param minus
62 * this value will be used as (currentPos - minus) to set the current readerIndex in
63 * the buffer.
64 */
65 void setReadPosition(int minus) {
66 pos -= minus;
67 readerIndex = pos;
68 buffer.readerIndex(readerIndex);
69 }
70
71 void clear() {
72 this.buffer = null;
73 this.bytes = null;
74 this.limit = 0;
75 this.pos = 0;
76 this.readerIndex = 0;
77 }
78 }