public virtual long Rank1(long pos, UnraveledSymbolXLB ctx) { return this.Rank1 (pos); }
public virtual bool Access(long pos, UnraveledSymbolXLB ctx) { return this.Access(pos); }
public virtual long Select1(long rank, UnraveledSymbolXLB ctx) { return this.Select1 (rank); }
public int Select(int symbol, int _rank, UnraveledSymbolXLB unraveled_ctx) { if (_rank < 1) { return -1; } if (symbol == 0) { return (int)this.xl_bitmap.Select1 (_rank); } long pos = symbol * ((long)this.Count); if (unraveled_ctx.prevrank == int.MinValue) { unraveled_ctx.prevrank = (int)this.xl_bitmap.Rank1 (pos - 1); } var p = this.xl_bitmap.Select1 (unraveled_ctx.prevrank + _rank, unraveled_ctx) - pos; return (int)p; }
public int Rank(int symbol, int _pos, UnraveledSymbolXLB unraveled_ctx) { if (_pos < 0) { return 0; } if (symbol == 0) { return (int)this.xl_bitmap.Rank1 (_pos); } long pos = symbol * ((long)this.Count); if (unraveled_ctx.prevrank == int.MinValue) { unraveled_ctx.prevrank = (int)this.xl_bitmap.Rank1 (pos - 1); } var rank_a = this.xl_bitmap.Rank1 (pos + _pos); return (int)(rank_a - unraveled_ctx.prevrank); }
public override long Select1(long rank, UnraveledSymbolXLB unraveled_ctx) { Context ctx = unraveled_ctx.ctx as Context; if (ctx == null) { var bctx = new BitStreamCtxRL (); unraveled_ctx.ctx = ctx = new Context (rank, bctx); ctx.prev_res = this.BackendSelect1 ((int)rank, ctx.ctx); } else { int left = (int)(rank - ctx.prev_arg); if (left < 0 || left > this.B * 2) { ctx.prev_res = this.BackendSelect1 ((int)rank, ctx.ctx); } else { for (int i = 0; i < left; i++) { long read = this.ReadNext (ctx.ctx); ctx.prev_res += read; } } } ctx.prev_arg = rank; return ctx.prev_res; }