aa
BitsRPC.java
Go to the documentation of this file.
1 package com.cliffc.aa.type;
2 
3 import com.cliffc.aa.util.Ary;
4 
5 import java.util.HashMap;
6 
7 // RPC Bits supporting a lattice; immutable; hash-cons'd.
8 public class BitsRPC extends Bits<BitsRPC> {
9  // Intern: lookup and return an existing Bits or install in hashmap and
10  // return a new Bits. Overridden in subclasses to make type-specific Bits.
11  private static HashMap<BitsRPC,BitsRPC> INTERN = new HashMap<>();
12  private static BitsRPC FREE=null;
13  @Override BitsRPC make_impl(int con, long[] bits ) {
14  BitsRPC b1 = FREE;
15  if( b1 == null ) b1 = new BitsRPC();
16  else FREE = null;
17  b1.init(con,bits);
18  BitsRPC b2 = INTERN.get(b1);
19  if( b2 != null ) { FREE = b1; return b2; }
20  else { INTERN.put(b1,b1); return b1; }
21  }
22 
23  private static final Bits.Tree<BitsRPC> TREE = new Bits.Tree<>();
24  @Override Tree<BitsRPC> tree() { return TREE; }
25  public static final int ALL = new_rpc(0);
26  public static int new_rpc( int par ) { return TREE.split(par); }
27  // Fast reset of parser state between calls 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 BitsRPC 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  static final BitsRPC FULL = new BitsRPC().make_impl(1,new long[]{1L | (1L<<ALL)});
34  private static final BitsRPC ANY = FULL.dual();
35  public static final BitsRPC NIL = make0(0);
36  private static final BitsRPC EMPTY = FULL.make(); // No bits
37  @Override public BitsRPC ALL() { return FULL; }
38  @Override public BitsRPC ANY() { return ANY ; }
39  @Override public BitsRPC EMPTY() { return EMPTY ; }
40 
41  static BitsRPC make0( int bit ) { return FULL.make(bit); }
42 }
com.cliffc.aa.type.Bits< BitsRPC >::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.BitsRPC.reset_to_init0
static void reset_to_init0()
Definition: BitsRPC.java:29
com.cliffc.aa.type.BitsRPC.ALL
static final int ALL
Definition: BitsRPC.java:25
com.cliffc.aa.type.BitsRPC.make0
static BitsRPC make0(int bit)
Definition: BitsRPC.java:41
com.cliffc
com.cliffc.aa.type.Bits.make
B make(boolean any, long[] bits)
Definition: Bits.java:154
com.cliffc.aa.util
Definition: AbstractEntry.java:1
com.cliffc.aa.util.Ary
Definition: Ary.java:11
com.cliffc.aa.type.BitsRPC.EMPTY
BitsRPC EMPTY()
Definition: BitsRPC.java:39
com.cliffc.aa.type.Bits.Tree
Definition: Bits.java:402
com.cliffc.aa.type.BitsRPC.new_rpc
static int new_rpc(int par)
Definition: BitsRPC.java:26
com.cliffc.aa.type.BitsRPC.ANY
BitsRPC ANY()
Definition: BitsRPC.java:38
com.cliffc.aa.type.BitsRPC.ANY
static final BitsRPC ANY
Definition: BitsRPC.java:34
com.cliffc.aa.type.BitsRPC.ALL
BitsRPC ALL()
Definition: BitsRPC.java:37
com.cliffc.aa.type.BitsRPC
Definition: BitsRPC.java:8
com.cliffc.aa.type.Bits.init
void init(int con, long[] bits)
Definition: Bits.java:80
com.cliffc.aa.type.Bits
Definition: Bits.java:61
com.cliffc.aa.type.BitsRPC.FREE
static BitsRPC FREE
Definition: BitsRPC.java:12
com.cliffc.aa.type.BitsRPC.EMPTY
static final BitsRPC EMPTY
Definition: BitsRPC.java:36
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.type.BitsRPC.tree
Tree< BitsRPC > tree()
Definition: BitsRPC.java:24
com.cliffc.aa.type.BitsRPC.init0
static void init0()
Definition: BitsRPC.java:28
com.cliffc.aa.type.BitsRPC.INTERN
static HashMap< BitsRPC, BitsRPC > INTERN
Definition: BitsRPC.java:11
com.cliffc.aa.type.BitsRPC.FULL
static final BitsRPC FULL
Definition: BitsRPC.java:33
com.cliffc.aa.type.BitsRPC.NIL
static final BitsRPC NIL
Definition: BitsRPC.java:35
com.cliffc.aa.type.BitsRPC.TREE
static final Bits.Tree< BitsRPC > TREE
Definition: BitsRPC.java:23
com
com.cliffc.aa.type.BitsRPC.make_impl
BitsRPC make_impl(int con, long[] bits)
Definition: BitsRPC.java:13