aa
BitsFun.java
Go to the documentation of this file.
1 package com.cliffc.aa.type;
2 
3 import java.util.HashMap;
4 
5 // Function index Bits supporting a lattice; immutable; hash-cons'd.
6 
7 public class BitsFun extends Bits<BitsFun> {
8  // Intern: lookup and return an existing Bits or install in hashmap and
9  // return a new Bits. Overridden in subclasses to make type-specific Bits.
10  private static final HashMap<BitsFun,BitsFun> INTERN = new HashMap<>();
11  private static BitsFun FREE=null;
12  @Override BitsFun make_impl(int con, long[] bits ) {
13  BitsFun b1 = FREE;
14  if( b1 == null ) b1 = new BitsFun();
15  else FREE = null;
16  b1.init(con,bits);
17  BitsFun b2 = INTERN.get(b1);
18  if( b2 != null ) { FREE = b1; return b2; }
19  else { INTERN.put(b1,b1); return b1; }
20  }
21 
22  private static final Bits.Tree<BitsFun> TREE = new Bits.Tree<>();
23  @Override public Tree<BitsFun> tree() { return TREE; }
24  public static final int ALL = new_fidx(0);
25  public static int new_fidx( int par ) { return TREE.split(par); }
26  public static int new_fidx( ) { return TREE.split(ALL); }
27  // Fast reset of parser state between calls0 to Exec
28  public static void init0() { TREE.init0(); }
29  public static void reset_to_init0() { TREE.reset_to_init0(); }
30 
31  // Have to make a first BitsFun here; thereafter the v-call to make_impl
32  // will make more on demand. But need the first one to make a v-call.
33  public static final BitsFun FULL = new BitsFun().make_impl(1,new long[]{1L | (1L<<ALL)});
34  public static final BitsFun ANY = FULL.dual();
35  public static final BitsFun NIL = make0(0);
36  public static final BitsFun XNIL = NIL.dual();
37  public static final BitsFun EMPTY = make0();
38  @Override public BitsFun ALL() { return FULL; }
39  @Override public BitsFun ANY() { return ANY ; }
40  @Override public BitsFun EMPTY() { return EMPTY ; }
41 
42  // Make a NEW fidx, with the given parent, and return the Bits with just it
43  static BitsFun make_new_fidx( int parent_fidx ) { return make0(new_fidx(parent_fidx)); }
44  public static BitsFun make0( int bit ) { return FULL.make(bit); }
45  public static BitsFun make0( int... bits ) { return FULL.make(bits); }
46  public static int peek() { return TREE.peek(); }
47  // True if this fidx has been split thus has children
48  public static boolean is_parent( int idx ) { return TREE.is_parent(idx); }
49  // Return parent fidx from child fidx.
50  public static int parent( int kid ) { return TREE.parent(kid); }
51  // Iterate over children
52  public static int next_kid( int alias, int kid ) { return TREE.next_kid(alias,kid); }
53 }
com.cliffc.aa.type.Bits< BitsFun >::bits
static long[] bits(int b)
Definition: Bits.java:283
com.cliffc.aa.type.Bits.dual
B dual()
Definition: Bits.java:368
com.cliffc.aa.type.BitsFun.make_new_fidx
static BitsFun make_new_fidx(int parent_fidx)
Definition: BitsFun.java:43
com.cliffc.aa.type.BitsFun.TREE
static final Bits.Tree< BitsFun > TREE
Definition: BitsFun.java:22
com.cliffc.aa.type.BitsFun.NIL
static final BitsFun NIL
Definition: BitsFun.java:35
com.cliffc.aa.type.BitsFun.parent
static int parent(int kid)
Definition: BitsFun.java:50
com.cliffc.aa.type.BitsFun.EMPTY
static final BitsFun EMPTY
Definition: BitsFun.java:37
com.cliffc.aa.type.BitsFun.ALL
BitsFun ALL()
Definition: BitsFun.java:38
com.cliffc.aa.type.BitsFun.make0
static BitsFun make0(int bit)
Definition: BitsFun.java:44
com.cliffc.aa.type.Bits.make
B make(boolean any, long[] bits)
Definition: Bits.java:154
com.cliffc.aa.type.BitsFun.ANY
BitsFun ANY()
Definition: BitsFun.java:39
com.cliffc.aa.type.BitsFun.init0
static void init0()
Definition: BitsFun.java:28
com.cliffc.aa.type.BitsFun.FULL
static final BitsFun FULL
Definition: BitsFun.java:33
com.cliffc.aa.type.BitsFun.XNIL
static final BitsFun XNIL
Definition: BitsFun.java:36
com.cliffc.aa.type.BitsFun.tree
Tree< BitsFun > tree()
Definition: BitsFun.java:23
com.cliffc.aa.type.BitsFun.new_fidx
static int new_fidx()
Definition: BitsFun.java:26
com.cliffc.aa.type.Bits.Tree
Definition: Bits.java:402
com.cliffc.aa.type.BitsFun.ALL
static final int ALL
Definition: BitsFun.java:24
com.cliffc.aa.type.BitsFun.make0
static BitsFun make0(int... bits)
Definition: BitsFun.java:45
com.cliffc.aa.type.BitsFun.is_parent
static boolean is_parent(int idx)
Definition: BitsFun.java:48
com.cliffc.aa.type.Bits.init
void init(int con, long[] bits)
Definition: Bits.java:80
com.cliffc.aa.type.BitsFun.make_impl
BitsFun make_impl(int con, long[] bits)
Definition: BitsFun.java:12
com.cliffc.aa.type.Bits< BitsFun >::idx
static int idx(long i)
Definition: Bits.java:199
com.cliffc.aa.type.BitsFun.INTERN
static final HashMap< BitsFun, BitsFun > INTERN
Definition: BitsFun.java:10
com.cliffc.aa.type.Bits
Definition: Bits.java:61
com.cliffc.aa.type.BitsFun
Definition: BitsFun.java:7
com.cliffc.aa.type.BitsFun.EMPTY
BitsFun EMPTY()
Definition: BitsFun.java:40
com.cliffc.aa.type.BitsFun.ANY
static final BitsFun ANY
Definition: BitsFun.java:34
com.cliffc.aa.type.BitsFun.reset_to_init0
static void reset_to_init0()
Definition: BitsFun.java:29
com.cliffc.aa.type.BitsFun.FREE
static BitsFun FREE
Definition: BitsFun.java:11
com.cliffc.aa.type.BitsFun.next_kid
static int next_kid(int alias, int kid)
Definition: BitsFun.java:52
com.cliffc.aa.type.BitsFun.peek
static int peek()
Definition: BitsFun.java:46
com.cliffc.aa.type.BitsFun.new_fidx
static int new_fidx(int par)
Definition: BitsFun.java:25