~vcs-imports/xena/trunk

« back to all changes in this revision

Viewing changes to ext/src/javahelp/jhMaster/JSearch/client/com/sun/java/help/search/.svn/text-base/GeneratorHeap.java.svn-base

  • Committer: matthewoliver
  • Date: 2009-12-10 03:18:07 UTC
  • Revision ID: vcs-imports@canonical.com-20091210031807-l086qguzdlljtkl9
Merged Xena Testing into Xena Stable for the Xena 5 release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * @(#)GeneratorHeap.java       1.6 06/10/30
 
3
 * 
 
4
 * Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
 
5
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
6
 * 
 
7
 * This code is free software; you can redistribute it and/or modify it
 
8
 * under the terms of the GNU General Public License version 2 only, as
 
9
 * published by the Free Software Foundation.  Sun designates this
 
10
 * particular file as subject to the "Classpath" exception as provided
 
11
 * by Sun in the LICENSE file that accompanied this code.
 
12
 * 
 
13
 * This code is distributed in the hope that it will be useful, but WITHOUT
 
14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
15
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
16
 * version 2 for more details (a copy is included in the LICENSE file that
 
17
 * accompanied this code).
 
18
 * 
 
19
 * You should have received a copy of the GNU General Public License version
 
20
 * 2 along with this work; if not, write to the Free Software Foundation,
 
21
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 
22
 * 
 
23
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 
24
 * CA 95054 USA or visit www.sun.com if you need additional information or
 
25
 * have any questions.
 
26
 */
 
27
 
 
28
/**
 
29
 * @date   1/13/98
 
30
 * @author Jacek R. Ambroziak
 
31
 * @group  Sun Microsystems Laboratories
 
32
 */
 
33
 
 
34
package com.sun.java.help.search;
 
35
 
 
36
class GeneratorHeap
 
37
{
 
38
  private static final int        InitSize = 128;
 
39
  private int                     _heapSize = 0;
 
40
  private ConceptGroupGenerator[] _heap;
 
41
  private int                     _size = InitSize;
 
42
  private int                     _free = 0;
 
43
  
 
44
  public GeneratorHeap() {
 
45
    _heap = new ConceptGroupGenerator[InitSize];
 
46
  }
 
47
  
 
48
  public void reset() {
 
49
    _free = 0;
 
50
  }
 
51
  
 
52
  public void addGenerator(ConceptGroupGenerator gen)
 
53
  {
 
54
    if (_free == _size)
 
55
      {
 
56
        ConceptGroupGenerator[] newArray =
 
57
          new ConceptGroupGenerator[_size *= 2];
 
58
        System.arraycopy(_heap, 0, newArray, 0, _free);
 
59
        _heap = newArray;
 
60
      }
 
61
    _heap[_free++] = gen;
 
62
  }
 
63
 
 
64
  private void buildHeap()
 
65
  {
 
66
    for (int i = _heapSize/2; i >= 0; i--)
 
67
      heapify(i);
 
68
  }
 
69
 
 
70
  private void heapify(int i)
 
71
  {
 
72
    int r = (i + 1) << 1, l = r - 1;
 
73
    int smallest = l<_heapSize&&_heap[l].position()<_heap[i].position()?l:i;
 
74
  
 
75
    if (r < _heapSize && _heap[r].position() < _heap[smallest].position())
 
76
      smallest = r;
 
77
    if (smallest != i)
 
78
      {
 
79
        ConceptGroupGenerator temp = _heap[smallest];
 
80
        _heap[smallest] = _heap[i];
 
81
        _heap[i] = temp;
 
82
        heapify(smallest);
 
83
      }
 
84
  }
 
85
 
 
86
  public boolean start(RoleFiller[] array) throws Exception
 
87
  {
 
88
    if ((_heapSize = _free) > 0)
 
89
      {
 
90
        for (int i = 0; i < _free; i++)
 
91
          _heap[i].next();
 
92
        buildHeap();
 
93
        _heap[0].generateFillers(array);
 
94
        return true;
 
95
      }
 
96
    else
 
97
      return false;
 
98
  }
 
99
 
 
100
  public boolean next(RoleFiller[] array) throws Exception
 
101
  {
 
102
    if (_heapSize > 0)
 
103
      {
 
104
        if (!_heap[0].next()) // no more
 
105
          if (_heapSize > 1)
 
106
            _heap[0] = _heap[--_heapSize];
 
107
          else
 
108
            {
 
109
              _heapSize = 0;
 
110
              return false;
 
111
            }
 
112
        heapify(0);
 
113
        _heap[0].generateFillers(array);
 
114
        return true;
 
115
      }
 
116
    else
 
117
      return false;
 
118
  }
 
119
}