Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/hsqldb/ReverseDatabaseFile.java


1   /* Copyright (c) 2001-2002, The HSQL Development Group
2    * All rights reserved.
3    *
4    * Redistribution and use in source and binary forms, with or without
5    * modification, are permitted provided that the following conditions are met:
6    *
7    * Redistributions of source code must retain the above copyright notice, this
8    * list of conditions and the following disclaimer.
9    *
10   * Redistributions in binary form must reproduce the above copyright notice,
11   * this list of conditions and the following disclaimer in the documentation
12   * and/or other materials provided with the distribution.
13   *
14   * Neither the name of the HSQL Development Group nor the names of its
15   * contributors may be used to endorse or promote products derived from this
16   * software without specific prior written permission.
17   *
18   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21   * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, 
22   * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
23   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
24   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  
31  
32  package org.hsqldb;
33  
34  import java.io.IOException;
35  import java.io.FileNotFoundException;
36  
37  /**
38   *  Cache class declaration <P>
39   *
40   *  The cache class implements the handling of reversed text table caches.
41   *
42   * @author sqlbob@users
43   * @version  1.7.0
44   */
45  class ReverseDatabaseFile extends org.hsqldb.DatabaseFile {
46  
47      private int  size;
48      private long max;
49  
50      ReverseDatabaseFile(String name, String mode,
51                          int inSize)
52                          throws FileNotFoundException, IOException {
53  
54          super(name, mode, inSize);
55  
56          max  = length();
57          pos  = max;
58          size = inSize;
59      }
60  
61      public void readSeek(long newPos) throws IOException {
62  
63          newPos = max - newPos;
64  
65          if ((newPos < 0) || (in == null)) {
66              seek(newPos);
67          } else if (newPos != pos) {
68              index -= (int) (pos - newPos);
69              pos   = newPos;
70  
71              if ((index < 0) || (index > count)) {
72                  count = 0;
73                  index = 0;
74              }
75          }
76      }
77  
78      public int read() throws IOException {
79  
80          if (in == null) {
81              return (super.read());
82          }
83  
84          if (index == 0) {
85              long newPos = pos - size;
86  
87              if (newPos < 0) {
88                  realSeek(0);
89  
90                  count = (int) pos;
91  
92                  readFully(in, 0, count);
93              } else {
94                  realSeek(newPos);
95                  readFully(in);
96  
97                  count = size;
98              }
99  
100             index = count;
101         }
102 
103         if (index == 0) {
104             return (-1);
105         }
106 
107         pos--;
108 
109         return (in[--index] & 0xff);
110     }
111 
112     public int readInteger() throws IOException {
113 
114         seek(pos);
115 
116         return (readInt());
117     }
118 
119     public long getFilePointer() throws IOException {
120         return (max - pos);
121     }
122 }