static
void dumpConfirms(const void *fdr_base, u32 conf_offset, u32 num_confirms,
FILE *f) {
- const u32 *conf = (const u32 *)((const char *)fdr_base + conf_offset);
+ const u32 *conf = reinterpret_cast<const u32 *>(reinterpret_cast<const char *>(fdr_base) + conf_offset);
for (u32 i = 0; i < num_confirms; i++) {
- const auto *fdrc = (const FDRConfirm *)((const char *)conf + conf[i]);
+ const auto *fdrc = reinterpret_cast<const FDRConfirm *>(reinterpret_cast<const char *>(conf) + conf[i]);
fprintf(f, " confirm %u\n", i);
fprintf(f, " andmsk 0x%016llx\n", fdrc->andmsk);
fprintf(f, " mult 0x%016llx\n", fdrc->mult);
fprintf(f, " buckets %u\n", des->getNumBuckets());
fprintf(f, " packed %s\n", des->packed ? "true" : "false");
fprintf(f, " strings %u\n", teddy->numStrings);
- fprintf(f, " size %zu bytes\n", fdrSize((const FDR *)teddy));
+ fprintf(f, " size %zu bytes\n", fdrSize(reinterpret_cast<const FDR *>(teddy)));
fprintf(f, " max length %u\n", teddy->maxStringLen);
fprintf(f, " floodoff %u (%x)\n", teddy->floodOffset,
teddy->floodOffset);
u32 maskWidth = des->getNumBuckets() / 8;
size_t headerSize = sizeof(Teddy);
- const u8 *teddy_base = (const u8 *)teddy;
+ const u8 *teddy_base = reinterpret_cast<const u8 *>(teddy);
const u8 *baseMsk = teddy_base + ROUNDUP_CL(headerSize);
dumpTeddyMasks(baseMsk, des->numMasks, maskWidth, f);
size_t maskLen = des->numMasks * 16 * 2 * maskWidth;
void fdrPrintStats(const FDR *fdr, FILE *f) {
if (fdrIsTeddy(fdr)) {
- dumpTeddy((const Teddy *)fdr, f);
+ dumpTeddy(reinterpret_cast<const Teddy *>(fdr), f);
} else {
dumpFDR(fdr, f);
}
switch (h->type) {
case HWLM_ENGINE_NOOD:
- noodPrintStats((const noodTable *)HWLM_C_DATA(h), f);
+ noodPrintStats(reinterpret_cast<const noodTable *>(HWLM_C_DATA(h)), f);
break;
case HWLM_ENGINE_FDR:
- fdrPrintStats((const FDR *)HWLM_C_DATA(h), f);
+ fdrPrintStats(reinterpret_cast<const FDR *>(HWLM_C_DATA(h)), f);
break;
default:
fprintf(f, "<unknown hwlm subengine>\n");
n->msk_len);
fprintf(f, "String: ");
for (u32 i = 0; i < n->msk_len; i++) {
- const u8 *m = (const u8 *)&n->cmp;
+ const u8 *m = reinterpret_cast<const u8 *>(&n->cmp);
if (isgraph(m[i]) && m[i] != '\\') {
fprintf(f, "%c", m[i]);
} else {
break;
case ACCEL_SHUFTI: {
fprintf(f, "\n");
- dumpShuftiMasks(f, (const u8 *)&accel.shufti.lo,
- (const u8 *)&accel.shufti.hi);
- dumpShuftiCharReach(f, (const u8 *)&accel.shufti.lo,
- (const u8 *)&accel.shufti.hi);
+ dumpShuftiMasks(f, reinterpret_cast<const u8 *>(&accel.shufti.lo),
+ reinterpret_cast<const u8 *>(&accel.shufti.hi));
+ dumpShuftiCharReach(f, reinterpret_cast<const u8 *>(&accel.shufti.lo),
+ reinterpret_cast<const u8 *>(&accel.shufti.hi));
break;
}
case ACCEL_DSHUFTI:
fprintf(f, "\n");
fprintf(f, "mask 1\n");
- dumpShuftiMasks(f, (const u8 *)&accel.dshufti.lo1,
- (const u8 *)&accel.dshufti.hi1);
+ dumpShuftiMasks(f, reinterpret_cast<const u8 *>(&accel.dshufti.lo1),
+ reinterpret_cast<const u8 *>(&accel.dshufti.hi1));
fprintf(f, "mask 2\n");
- dumpShuftiMasks(f, (const u8 *)&accel.dshufti.lo2,
- (const u8 *)&accel.dshufti.hi2);
- dumpDShuftiCharReach(f, (const u8 *)&accel.dshufti.lo1,
- (const u8 *)&accel.dshufti.hi1,
- (const u8 *)&accel.dshufti.lo2,
- (const u8 *)&accel.dshufti.hi2);
+ dumpShuftiMasks(f, reinterpret_cast<const u8 *>(&accel.dshufti.lo2),
+ reinterpret_cast<const u8 *>(&accel.dshufti.hi2));
+ dumpDShuftiCharReach(f, reinterpret_cast<const u8 *>(&accel.dshufti.lo1),
+ reinterpret_cast<const u8 *>(&accel.dshufti.hi1),
+ reinterpret_cast<const u8 *>(&accel.dshufti.lo2),
+ reinterpret_cast<const u8 *>(&accel.dshufti.hi2));
break;
case ACCEL_TRUFFLE: {
fprintf(f, "\n");
- dumpTruffleMasks(f, (const u8 *)&accel.truffle.mask1,
- (const u8 *)&accel.truffle.mask2);
- dumpTruffleCharReach(f, (const u8 *)&accel.truffle.mask1,
- (const u8 *)&accel.truffle.mask2);
+ dumpTruffleMasks(f, reinterpret_cast<const u8 *>(&accel.truffle.mask1),
+ reinterpret_cast<const u8 *>(&accel.truffle.mask2));
+ dumpTruffleCharReach(f, reinterpret_cast<const u8 *>(&accel.truffle.mask1),
+ reinterpret_cast<const u8 *>(&accel.truffle.mask2));
break;
}
default:
static
void dumpTextSubCastle(const SubCastle &sub, FILE *f) {
const RepeatInfo *info =
- (const RepeatInfo *)((const char *)&sub + sub.repeatInfoOffset);
+ reinterpret_cast<const RepeatInfo *>(reinterpret_cast<const char *>(&sub) + sub.repeatInfoOffset);
fprintf(f, " repeat model: %s\n", repeatTypeName(info->type));
fprintf(f, " repeat bounds: {%u, %u}\n", info->repeatMin,
info->repeatMax);
}
void nfaExecCastle_dump(const struct NFA *nfa, const string &base) {
- const Castle *c = (const Castle *)getImplNfa(nfa);
+ const Castle *c = reinterpret_cast<const Castle *>(getImplNfa(nfa));
StdioFile f(base + ".txt", "w");
fprintf(f, "negated verm, scanning for 0x%02x\n", c->u.verm.c);
break;
case CASTLE_SHUFTI: {
- const CharReach cr = shufti2cr((const u8 *)&c->u.shuf.mask_lo,
- (const u8 *)&c->u.shuf.mask_hi);
+ const CharReach cr = shufti2cr(reinterpret_cast<const u8 *>(&c->u.shuf.mask_lo),
+ reinterpret_cast<const u8 *>(&c->u.shuf.mask_hi));
fprintf(f, "shufti, scanning for %s (%zu chars)\n",
describeClass(cr).c_str(), cr.count());
break;
}
case CASTLE_TRUFFLE: {
- const CharReach cr = truffle2cr((const u8 *)&c->u.truffle.mask1,
- (const u8 *)&c->u.truffle.mask2);
+ const CharReach cr = truffle2cr(reinterpret_cast<const u8 *>(&c->u.truffle.mask1),
+ reinterpret_cast<const u8 *>(&c->u.truffle.mask2));
fprintf(f, "truffle, scanning for %s (%zu chars)\n",
describeClass(cr).c_str(), cr.count());
break;
fprintf(f, "\n");
const SubCastle *sub =
- (const SubCastle *)((const char *)c + sizeof(Castle));
+ reinterpret_cast<const SubCastle *>(reinterpret_cast<const char *>(c) + sizeof(Castle));
for (u32 i = 0; i < c->numRepeats; i++) {
fprintf(f, "Sub %u:\n", i);
dumpTextSubCastle(sub[i], f);
static
void goughGetTransitions(const NFA *n, u16 s, u16 *t) {
assert(isGoughType(n->type));
- const mcclellan *m = (const mcclellan *)getImplNfa(n);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(n));
const mstate_aux *aux = getAux(n, s);
const u32 as = m->alphaShift;
const char *sher_base
- = (const char *)m - sizeof(struct NFA) + m->sherman_offset;
+ = reinterpret_cast<const char *>(m) - sizeof(struct NFA) + m->sherman_offset;
if (n->type == GOUGH_NFA_8) {
- const u8 *succ_table = (const u8 *)((const char *)m + sizeof(mcclellan));
+ const u8 *succ_table = reinterpret_cast<const u8 *>(reinterpret_cast<const char *>(m) + sizeof(mcclellan));
for (u16 c = 0; c < N_CHARS; c++) {
t[c] = succ_table[((u32)s << as) + m->remap[c]];
}
if (s >= m->sherman_limit) {
const char *state_base
= findShermanState(m, sher_base, m->sherman_limit, s);
- base_s = *(const u16 *)(state_base + SHERMAN_DADDY_OFFSET);
+ base_s = *(reinterpret_cast<const u16 *>(state_base + SHERMAN_DADDY_OFFSET));
}
- const u16 *succ_table = (const u16 *)((const char *)m
+ const u16 *succ_table = reinterpret_cast<const u16 *>(reinterpret_cast<const char *>(m)
+ sizeof(mcclellan));
for (u16 c = 0; c < N_CHARS; c++) {
const u8 *addr
- = (const u8*)(succ_table + (((u32)base_s << as) + m->remap[c]));
+ = reinterpret_cast<const u8*>(succ_table + (((u32)base_s << as) + m->remap[c]));
t[c] = unaligned_load_u16(addr);
t[c] &= STATE_MASK;
}
if (s >= m->sherman_limit) {
const char *state_base
= findShermanState(m, sher_base, m->sherman_limit, s);
- u8 len = *(const u8 *)(SHERMAN_LEN_OFFSET + state_base);
- const u8 *chars = (const u8 *)state_base + SHERMAN_CHARS_OFFSET;
+ u8 len = *(reinterpret_cast<const u8 *>(SHERMAN_LEN_OFFSET + state_base));
+ const u8 *chars = reinterpret_cast<const u8 *>(state_base) + SHERMAN_CHARS_OFFSET;
const u16 *states
- = (const u16 *)(state_base + SHERMAN_STATES_OFFSET(len));
+ = reinterpret_cast<const u16 *>(state_base + SHERMAN_STATES_OFFSET(len));
for (u8 i = 0; i < len; i++) {
for (u16 c = 0; c < N_CHARS; c++) {
if (m->remap[c] != chars[i]) {
- t[c] = unaligned_load_u16((const u8*)&states[i])
+ t[c] = unaligned_load_u16(reinterpret_cast<const u8*>(&states[i]))
& STATE_MASK;
}
}
bool isSherman = m->sherman_limit && i >= m->sherman_limit;
const char *sher_base
- = (const char *)m - sizeof(NFA) + m->sherman_offset;
+ = reinterpret_cast<const char *>(m) - sizeof(NFA) + m->sherman_offset;
fprintf(f, "%u [ width = 1, fixedsize = true, fontsize = 12, "
"label = \"%u%s\" ]; \n", i, i, isSherman ? "w":"");
if (aux->accel_offset) {
dumpAccelDot(f, i,
- &((const gough_accel *)((const char *)m + aux->accel_offset))->accel);
+ &((const gough_accel *)(reinterpret_cast<const char *>(m) + aux->accel_offset))->accel);
}
if (aux->accept_eod) {
const char *sherman_state
= findShermanState(m, sher_base, m->sherman_limit, i);
fprintf(f, "%u [ fillcolor = lightblue style=filled ];\n", i);
- u16 daddy = *(const u16 *)(sherman_state + SHERMAN_DADDY_OFFSET);
+ u16 daddy = *(reinterpret_cast<const u16 *>(sherman_state + SHERMAN_DADDY_OFFSET));
if (daddy) {
fprintf(f, "%u -> %u [ color=royalblue style=dashed weight=0.1]\n",
i, daddy);
for (set<pair<pair<u32, u32>, u32 > >::const_iterator it
= prog_dump.begin(); it != prog_dump.end(); ++it) {
assert(it->second);
- const gough_ins *p = (const gough_ins *)((const u8 *)nfa + it->second);
+ const gough_ins *p = reinterpret_cast<const gough_ins *>(reinterpret_cast<const u8 *>(nfa) + it->second);
dump_program(f, it->first, p);
}
}
static
void dumpTransitions(const NFA *nfa, FILE *f,
set<pair<pair<u32, u32>, u32 > > *prog_dump) {
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
const gough_info *g = get_gough(m);
u32 alphaSize = 1U << m->alphaShift;
- const u32 *prog_offset_table = (const u32 *)(g + 1);
+ const u32 *prog_offset_table = reinterpret_cast<const u32 *>(g + 1);
for (u16 i = 0; i < m->state_count; i++) {
fprintf(f, "%05hu", i);
const mstate_aux *aux = getAux(nfa, i);
if (aux->accel_offset) {
- dumpAccelText(f, (const union AccelAux *)((const char *)m +
+ dumpAccelText(f, reinterpret_cast<const union AccelAux *>(reinterpret_cast<const char *>(m) +
aux->accel_offset));
}
static
void nfaExecGough8_dumpDot(const struct NFA *nfa, FILE *f) {
assert(nfa->type == GOUGH_NFA_8);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
void nfaExecGough8_dumpText(const struct NFA *nfa, FILE *f) {
assert(nfa->type == GOUGH_NFA_8);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
fprintf(f, "gough 8\n");
fprintf(f, "report: %u, states %u, length %u\n", m->arb_report,
static
void nfaExecGough16_dumpDot(const struct NFA *nfa, FILE *f) {
assert(nfa->type == GOUGH_NFA_16);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
static
void nfaExecGough16_dumpText(const struct NFA *nfa, FILE *f) {
assert(nfa->type == GOUGH_NFA_16);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
// const gough_info *h = get_gough(m);
fprintf(f, "gough 16\n");
static
void lbrDumpCommon(const lbr_common *lc, FILE *f) {
const RepeatInfo *info
- = (const RepeatInfo *)((const char *)lc + lc->repeatInfoOffset);
+ = reinterpret_cast<const RepeatInfo *>(reinterpret_cast<const char *>(lc) + lc->repeatInfoOffset);
fprintf(f, "Limited Bounded Repeat\n");
fprintf(f, "\n");
fprintf(f, "repeat model: %s\n", repeatTypeName(info->type));
void nfaExecLbrDot_dump(const NFA *nfa, const string &base) {
assert(nfa);
assert(nfa->type == LBR_NFA_DOT);
- const lbr_dot *ld = (const lbr_dot *)getImplNfa(nfa);
+ const lbr_dot *ld = reinterpret_cast<const lbr_dot *>(getImplNfa(nfa));
StdioFile f(base + ".txt", "w");
lbrDumpCommon(&ld->common, f);
fprintf(f, "DOT model\n");
void nfaExecLbrVerm_dump(const NFA *nfa, const string &base) {
assert(nfa);
assert(nfa->type == LBR_NFA_VERM);
- const lbr_verm *lv = (const lbr_verm *)getImplNfa(nfa);
+ const lbr_verm *lv = reinterpret_cast<const lbr_verm *>(getImplNfa(nfa));
StdioFile f(base + ".txt", "w");
lbrDumpCommon(&lv->common, f);
fprintf(f, "VERM model, scanning for 0x%02x\n", lv->c);
void nfaExecLbrNVerm_dump(const NFA *nfa, const string &base) {
assert(nfa);
assert(nfa->type == LBR_NFA_NVERM);
- const lbr_verm *lv = (const lbr_verm *)getImplNfa(nfa);
+ const lbr_verm *lv = reinterpret_cast<const lbr_verm *>(getImplNfa(nfa));
StdioFile f(base + ".txt", "w");
lbrDumpCommon(&lv->common, f);
fprintf(f, "NEGATED VERM model, scanning for 0x%02x\n", lv->c);
StdioFile f(base + ".txt", "w");
- const lbr_shuf *ls = (const lbr_shuf *)getImplNfa(nfa);
+ const lbr_shuf *ls = reinterpret_cast<const lbr_shuf *>(getImplNfa(nfa));
lbrDumpCommon(&ls->common, f);
- CharReach cr = shufti2cr((const u8 *)&ls->mask_lo,
- (const u8 *)&ls->mask_hi);
+ CharReach cr = shufti2cr(reinterpret_cast<const u8 *>(&ls->mask_lo),
+ reinterpret_cast<const u8 *>(&ls->mask_hi));
fprintf(f, "SHUF model, scanning for: %s (%zu chars)\n",
describeClass(cr, 20, CC_OUT_TEXT).c_str(), cr.count());
fprintf(f, "\n");
StdioFile f(base + ".txt", "w");
- const lbr_truf *lt = (const lbr_truf *)getImplNfa(nfa);
+ const lbr_truf *lt = reinterpret_cast<const lbr_truf *>(getImplNfa(nfa));
lbrDumpCommon(<->common, f);
- CharReach cr = truffle2cr((const u8 *)<->mask1,
- (const u8 *)<->mask2);
+ CharReach cr = truffle2cr((const u8 *)(<->mask1),
+ (const u8 *)(<->mask2));
fprintf(f, "TRUFFLE model, scanning for: %s (%zu chars)\n",
describeClass(cr, 20, CC_OUT_TEXT).c_str(), cr.count());
fprintf(f, "\n");
fprintf(f, "\n");
fprintf(f, "%u bounded repeats.\n", limex->repeatCount);
- const char *base = (const char *)limex;
- const u32 *repeatOffset = (const u32 *)(base + limex->repeatOffset);
+ const char *base = reinterpret_cast<const char *>(limex);
+ const u32 *repeatOffset = reinterpret_cast<const u32 *>(base + limex->repeatOffset);
for (u32 i = 0; i < limex->repeatCount; i++) {
const NFARepeatInfo *info =
- (const NFARepeatInfo *)(base + repeatOffset[i]);
+ reinterpret_cast<const NFARepeatInfo *>(base + repeatOffset[i]);
const RepeatInfo *repeat =
- (const RepeatInfo *)((const char *)info + sizeof(*info));
+ reinterpret_cast<const RepeatInfo *>(reinterpret_cast<const char *>(info) + sizeof(*info));
fprintf(f, " repeat %u: %s {%u,%u} packedCtrlSize=%u, "
"stateSize=%u\n",
i, repeatTypeName(repeat->type), repeat->repeatMin,
fprintf(f, " nfa state: stream offset %u\n", info->stateOffset);
fprintf(f, " ");
- const u8 *tug_mask = (const u8 *)info + info->tugMaskOffset;
+ const u8 *tug_mask = reinterpret_cast<const u8 *>(info) + info->tugMaskOffset;
dumpMask(f, "tugs", tug_mask, model_size);
}
template<typename limex_type>
static
const NFA *limex_to_nfa(const limex_type *limex) {
- return (const NFA *)((const char *)limex - sizeof(NFA));
+ return reinterpret_cast<const NFA *>(reinterpret_cast<const char *>(limex) - sizeof(NFA));
}
template<typename limex_type>
u32 tableOffset = limex->accelTableOffset;
u32 auxOffset = limex->accelAuxOffset;
- const u8 *accelTable = (const u8 *)((const char *)limex + tableOffset);
- const AccelAux *aux = (const AccelAux *)((const char *)limex + auxOffset);
+ const u8 *accelTable = reinterpret_cast<const u8 *>(reinterpret_cast<const char *>(limex) + tableOffset);
+ const AccelAux *aux = reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(limex) + auxOffset);
for (u32 i = 0; i < limex->accelCount; i++) {
fprintf(f, " accel %u (aux entry %u): ", i, accelTable[i]);
continue;
}
fprintf(f, " idx %u fires report list %u:", i, a.reports);
- const ReportID *report = (const ReportID *)(limex_base + a.reports);
+ const ReportID *report = reinterpret_cast<const ReportID *>(limex_base + a.reports);
for (; *report != MO_INVALID_IDX; report++) {
fprintf(f, " %u", *report);
}
template<typename limex_type>
static
void dumpAccepts(const limex_type *limex, FILE *f) {
- const char *limex_base = (const char *)limex;
+ const char *limex_base = reinterpret_cast<const char *>(limex);
const u32 acceptCount = limex->acceptCount;
const u32 acceptEodCount = limex->acceptEodCount;
fprintf(f, "\n%u accepts.\n", acceptCount);
const auto *accepts =
- (const struct NFAAccept *)(limex_base + limex->acceptOffset);
+ reinterpret_cast<const struct NFAAccept *>(limex_base + limex->acceptOffset);
dumpAcceptList(limex_base, accepts, acceptCount, f);
fprintf(f, "\n%u accepts at EOD.\n", acceptEodCount);
const auto *accepts_eod =
- (const struct NFAAccept *)(limex_base + limex->acceptEodOffset);
+ reinterpret_cast<const struct NFAAccept *>(limex_base + limex->acceptEodOffset);
dumpAcceptList(limex_base, accepts_eod, acceptEodCount, f);
fprintf(f, "\n");
}
u32 size = limex_traits<limex_type>::size;
// Dump squash masks, if there are any.
- const u8 *squashMask = (const u8 *)limex + limex->squashOffset;
+ const u8 *squashMask = reinterpret_cast<const u8 *>(limex) + limex->squashOffset;
for (u32 i = 0; i < limex->squashCount; i++) {
std::ostringstream name;
name << "squash_" << i;
const typename limex_traits<limex_type>::exception_type *
getExceptionTable(const limex_type *limex) {
return (const typename limex_traits<limex_type>::exception_type *)
- ((const char *)limex + limex->exceptionOffset);
+ (reinterpret_cast<const char *>(limex) + limex->exceptionOffset);
}
template<typename limex_type>
getExceptionTable(limex);
const u32 size = limex_traits<limex_type>::size;
- const char *limex_base = (const char *)limex;
+ const char *limex_base = reinterpret_cast<const char *>(limex);
fprintf(f, "\n");
for (u32 i = 0; i < limex->exceptionCount; i++) {
case LIMEX_TRIGGER_POS: fprintf(f, " trigger: POS\n"); break;
default: break;
}
- dumpMask(f, "succ", (const u8 *)&e[i].successors, size);
- dumpMask(f, "squash", (const u8 *)&e[i].squash, size);
+ dumpMask(f, "succ", reinterpret_cast<const u8 *>(&e[i].successors), size);
+ dumpMask(f, "squash", reinterpret_cast<const u8 *>(&e[i].squash), size);
fprintf(f, "reports: ");
if (e[i].reports == MO_INVALID_IDX) {
fprintf(f, " <none>\n");
} else {
- const ReportID *r = (const ReportID *)(limex_base + e[i].reports);
+ const ReportID *r = reinterpret_cast<const ReportID *>(limex_base + e[i].reports);
while (*r != MO_INVALID_IDX) {
fprintf(f, " %u", *r++);
}
fprintf(f, "Shift Masks:\n");
for(u32 i = 0; i < limex->shiftCount; i++) {
fprintf(f, "\t Shift %u(%hhu)\t\tMask: %s\n", i, limex->shiftAmount[i],
- dumpMask((const u8 *)&limex->shift[i], size).c_str());
+ dumpMask(reinterpret_cast<const u8 *>(&limex->shift[i]), size).c_str());
}
}
template<typename limex_type>
}
fprintf(f, "\n\n");
- dumpMask(f, "init", (const u8 *)&limex->init, size);
- dumpMask(f, "init_dot_star", (const u8 *)&limex->initDS, size);
- dumpMask(f, "accept", (const u8 *)&limex->accept, size);
- dumpMask(f, "accept_at_eod", (const u8 *)&limex->acceptAtEOD, size);
- dumpMask(f, "accel", (const u8 *)&limex->accel, size);
- dumpMask(f, "accel_and_friends", (const u8 *)&limex->accel_and_friends,
+ dumpMask(f, "init", reinterpret_cast<const u8 *>(&limex->init), size);
+ dumpMask(f, "init_dot_star", reinterpret_cast<const u8 *>(&limex->initDS), size);
+ dumpMask(f, "accept", reinterpret_cast<const u8 *>(&limex->accept), size);
+ dumpMask(f, "accept_at_eod", reinterpret_cast<const u8 *>(&limex->acceptAtEOD), size);
+ dumpMask(f, "accel", reinterpret_cast<const u8 *>(&limex->accel), size);
+ dumpMask(f, "accel_and_friends", reinterpret_cast<const u8 *>(&limex->accel_and_friends),
size);
- dumpMask(f, "compress_mask", (const u8 *)&limex->compressMask, size);
- dumpMask(f, "emask", (const u8 *)&limex->exceptionMask, size);
- dumpMask(f, "zombie", (const u8 *)&limex->zombieMask, size);
+ dumpMask(f, "compress_mask", reinterpret_cast<const u8 *>(&limex->compressMask), size);
+ dumpMask(f, "emask", reinterpret_cast<const u8 *>(&limex->exceptionMask), size);
+ dumpMask(f, "zombie", reinterpret_cast<const u8 *>(&limex->zombieMask), size);
// Dump top masks, if there are any.
u32 topCount = limex->topCount;
- const u8 *topMask = (const u8 *)limex + limex->topOffset;
+ const u8 *topMask = reinterpret_cast<const u8 *>(limex) + limex->topOffset;
for (u32 i = 0; i < topCount; i++) {
std::ostringstream name;
name << "top_" << i;
dumpSquash(limex, f);
dumpLimexReachMap(limex->reachMap, f);
- dumpLimexReachMasks(size, (const u8 *)limex + sizeof(*limex) /* reach*/,
+ dumpLimexReachMasks(size, reinterpret_cast<const u8 *>(limex) + sizeof(*limex) /* reach*/,
limex->reachSize, f);
dumpAccepts(limex, f);
void label_state(FILE *f, u32 state) const override {
const typename limex_traits<limex_type>::exception_type *exceptions
= getExceptionTable(limex);
- if (!testbit((const u8 *)&limex->exceptionMask,
+ if (!testbit(reinterpret_cast<const u8 *>(&limex->exceptionMask),
limex_traits<limex_type>::size, state)) {
return;
}
void dumpVertexDotInfo(const limex_type *limex, u32 state_count, FILE *f,
const nfa_labeller &labeller) {
u32 size = sizeof(limex->init) * 8;
- const u8 *reach = (const u8 *)limex + sizeof(*limex);
+ const u8 *reach = reinterpret_cast<const u8 *>(limex) + sizeof(*limex);
vector<CharReach> perStateReach;
setupReach(limex->reachMap, reach, size, state_count, &perStateReach);
- const u8 *topMask = (const u8 *)limex + limex->topOffset;
+ const u8 *topMask = reinterpret_cast<const u8 *>(limex) + limex->topOffset;
for (u32 state = 0; state < state_count; state++) {
fprintf(f, "%u [ width = 1, fixedsize = true, fontsize = 12, "
// bung in another couple lines to push char class (the widest thing) up a bit
fprintf(f, "\\n\\n\" ];\n");
- if (testbit((const u8 *)&limex->acceptAtEOD, size, state)) {
+ if (testbit(reinterpret_cast<const u8 *>(&limex->acceptAtEOD), size, state)) {
fprintf(f, "%u [ shape = box ];\n", state);
- } else if (testbit((const u8 *)&limex->accept, size, state)) {
+ } else if (testbit(reinterpret_cast<const u8 *>(&limex->accept), size, state)) {
fprintf(f, "%u [ shape = doublecircle ];\n", state);
}
- if (testbit((const u8 *)&limex->accel, size, state)) {
+ if (testbit(reinterpret_cast<const u8 *>(&limex->accel), size, state)) {
fprintf(f, "%u [ color = red style = diagonals];\n", state);
}
- if (testbit((const u8 *)&limex->init, size, state)) {
+ if (testbit(reinterpret_cast<const u8 *>(&limex->init), size, state)) {
fprintf(f, "START -> %u [ color = grey ];\n", state);
}
static
void dumpExDotInfo(const limex_type *limex, u32 state, FILE *f) {
u32 size = limex_traits<limex_type>::size;
- if (!testbit((const u8 *)&limex->exceptionMask, size, state)) {
+ if (!testbit(reinterpret_cast<const u8 *>(&limex->exceptionMask), size, state)) {
return; /* not exceptional */
}
u32 state_count = limex_to_nfa(limex)->nPositions;
for (u32 j = 0; j < state_count; j++) {
- if (testbit((const u8 *)&e->successors, size, j)) {
+ if (testbit(reinterpret_cast<const u8 *>(&e->successors), size, j)) {
fprintf(f, "%u -> %u [color = blue];\n", state, j);
}
- if (!testbit((const u8 *)&e->squash, size, j)) {
+ if (!testbit(reinterpret_cast<const u8 *>(&e->squash), size, j)) {
fprintf(f, "%u -> %u [color = grey style = dashed];\n", state, j);
}
}
void dumpLimDotInfo(const limex_type *limex, u32 state, FILE *f) {
for (u32 j = 0; j < limex->shiftCount; j++) {
const u32 shift_amount = limex->shiftAmount[j];
- if (testbit((const u8 *)&limex->shift[j],
+ if (testbit(reinterpret_cast<const u8 *>(&limex->shift[j]),
limex_traits<limex_type>::size, state)) {
fprintf(f, "%u -> %u;\n", state, state + shift_amount);
}
#define LIMEX_DUMP_FN(size) \
void nfaExecLimEx##size##_dump(const NFA *nfa, const string &base) { \
- auto limex = (const LimExNFA##size *)getImplNfa(nfa); \
+ auto limex = reinterpret_cast<const LimExNFA##size *>(getImplNfa(nfa)); \
dumpLimexText(limex, StdioFile(base + ".txt", "w")); \
dumpLimexDot(nfa, limex, StdioFile(base + ".dot", "w")); \
}
const mstate_aux *getAux(const NFA *n, dstate_id_t i) {
assert(n && isDfaType(n->type));
- const mcclellan *m = (const mcclellan *)getImplNfa(n);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(n));
const mstate_aux *aux_base
- = (const mstate_aux *)((const char *)n + m->aux_offset);
+ = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(n) + m->aux_offset);
const mstate_aux *aux = aux_base + i;
- assert((const char *)aux < (const char *)n + m->length);
+ assert(reinterpret_cast<const char *>(aux) < reinterpret_cast<const char *>(n) + m->length);
return aux;
}
static
void mcclellanGetTransitions(const NFA *n, u16 s, u16 *t) {
assert(isMcClellanType(n->type));
- const mcclellan *m = (const mcclellan *)getImplNfa(n);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(n));
const mstate_aux *aux = getAux(n, s);
const u32 as = m->alphaShift;
if (n->type == MCCLELLAN_NFA_8) {
- const u8 *succ_table = (const u8 *)((const char *)m
+ const u8 *succ_table = reinterpret_cast<const u8 *>(reinterpret_cast<const char *>(m)
+ sizeof(mcclellan));
for (u16 c = 0; c < N_CHARS; c++) {
t[c] = succ_table[((u32)s << as) + m->remap[c]];
}
} else {
u16 base_s = s;
- const char *winfo_base = (const char *)n + m->sherman_offset;
+ const char *winfo_base = reinterpret_cast<const char *>(n) + m->sherman_offset;
const char *state_base
= winfo_base + SHERMAN_FIXED_SIZE * (s - m->sherman_limit);
base_s = unaligned_load_u16(state_base + SHERMAN_DADDY_OFFSET);
}
- const u16 *succ_table = (const u16 *)((const char *)m
+ const u16 *succ_table = reinterpret_cast<const u16 *>(reinterpret_cast<const char *>(m)
+ sizeof(mcclellan));
for (u16 c = 0; c < N_CHARS; c++) {
- const u8 *addr = (const u8*)(succ_table + (((u32)base_s << as)
+ const u8 *addr = reinterpret_cast<const u8*>(succ_table + (((u32)base_s << as)
+ m->remap[c]));
t[c] = unaligned_load_u16(addr);
t[c] &= STATE_MASK;
if (s >= m->sherman_limit) {
UNUSED char type = *(state_base + SHERMAN_TYPE_OFFSET);
assert(type == SHERMAN_STATE);
- u8 len = *(const u8 *)(SHERMAN_LEN_OFFSET + state_base);
+ u8 len = *(reinterpret_cast<const u8 *>(SHERMAN_LEN_OFFSET + state_base));
const char *chars = state_base + SHERMAN_CHARS_OFFSET;
- const u16 *states = (const u16 *)(state_base
+ const u16 *states = reinterpret_cast<const u16 *>(state_base
+ SHERMAN_STATES_OFFSET(len));
for (u8 i = 0; i < len; i++) {
for (u16 c = 0; c < N_CHARS; c++) {
if (m->remap[c] == chars[i]) {
- t[c] = unaligned_load_u16((const u8*)&states[i]) & STATE_MASK;
+ t[c] = unaligned_load_u16(reinterpret_cast<const u8*>(&states[i])) & STATE_MASK;
}
}
}
"label = \"%u%s\" ]; \n", i, i, isSherman ? "w":"");
if (aux->accel_offset) {
- dumpAccelDot(f, i, (const union AccelAux *)
- ((const char *)m + aux->accel_offset));
+ dumpAccelDot(f, i, reinterpret_cast<const union AccelAux *>
+ (reinterpret_cast<const char *>(m) + aux->accel_offset));
}
if (aux->accept_eod) {
}
if (isSherman) {
- const char *winfo_base = (const char *)n + m->sherman_offset;
+ const char *winfo_base = reinterpret_cast<const char *>(n) + m->sherman_offset;
const char *state_base
= winfo_base + SHERMAN_FIXED_SIZE * (i - m->sherman_limit);
- assert(state_base < (const char *)m + m->length - sizeof(NFA));
- UNUSED u8 type = *(const u8 *)(state_base + SHERMAN_TYPE_OFFSET);
+ assert(state_base < reinterpret_cast<const char *>(m) + m->length - sizeof(NFA));
+ UNUSED u8 type = *(reinterpret_cast<const u8 *>(state_base + SHERMAN_TYPE_OFFSET));
assert(type == SHERMAN_STATE);
fprintf(f, "%u [ fillcolor = lightblue style=filled ];\n", i);
- u16 daddy = *(const u16 *)(state_base + SHERMAN_DADDY_OFFSET);
+ u16 daddy = *(reinterpret_cast<const u16 *>(state_base + SHERMAN_DADDY_OFFSET));
if (daddy) {
fprintf(f, "%u -> %u [ color=royalblue style=dashed weight=0.1]\n",
i, daddy);
static
void nfaExecMcClellan16_dumpDot(const NFA *nfa, FILE *f) {
assert(nfa->type == MCCLELLAN_NFA_16);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
static
void nfaExecMcClellan8_dumpDot(const NFA *nfa, FILE *f) {
assert(nfa->type == MCCLELLAN_NFA_8);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
continue;
}
- const AccelAux *accel = (const AccelAux *)((const char *)m
+ const AccelAux *accel = reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(m)
+ aux[i].accel_offset);
fprintf(f, "%05hu ", i);
dumpAccelInfo(f, *accel);
for (u16 i = 0; i < sherman_ceil; i++) {
fprintf(f, "%05hu", i);
if (aux[i].accel_offset) {
- dumpAccelText(f, (const union AccelAux *)((const char *)m +
+ dumpAccelText(f, reinterpret_cast<const union AccelAux *>(reinterpret_cast<const char *>(m) +
aux[i].accel_offset));
}
static
void nfaExecMcClellan16_dumpText(const NFA *nfa, FILE *f) {
assert(nfa->type == MCCLELLAN_NFA_16);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
const mstate_aux *aux =
- (const mstate_aux *)((const char *)nfa + m->aux_offset);
+ reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(nfa) + m->aux_offset);
fprintf(f, "mcclellan 16\n");
dumpCommonHeader(f, m);
static
void nfaExecMcClellan8_dumpText(const NFA *nfa, FILE *f) {
assert(nfa->type == MCCLELLAN_NFA_8);
- const mcclellan *m = (const mcclellan *)getImplNfa(nfa);
+ const mcclellan *m = reinterpret_cast<const mcclellan *>(getImplNfa(nfa));
const mstate_aux *aux =
- (const mstate_aux *)((const char *)nfa + m->aux_offset);
+ reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(nfa) + m->aux_offset);
fprintf(f, "mcclellan 8\n");
dumpCommonHeader(f, m);
static
const mstate_aux *getAux(const NFA *n, dstate_id_t i) {
- auto *m = (const mcsheng *)getImplNfa(n);
- auto *aux_base = (const mstate_aux *)((const char *)n + m->aux_offset);
+ auto *m = reinterpret_cast<const mcsheng *>(getImplNfa(n));
+ auto *aux_base = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(n) + m->aux_offset);
const mstate_aux *aux = aux_base + i;
- assert((const char *)aux < (const char *)n + m->length);
+ assert(reinterpret_cast<const char *>(aux) < reinterpret_cast<const char *>(n) + m->length);
return aux;
}
static
void next_states(const NFA *n, u16 s, u16 *t) {
- const mcsheng *m = (const mcsheng *)getImplNfa(n);
+ const mcsheng *m = reinterpret_cast<const mcsheng *>(getImplNfa(n));
const mstate_aux *aux = getAux(n, s);
const u32 as = m->alphaShift;
assert(s != DEAD_STATE);
if (s < m->sheng_end) {
for (u16 c = 0; c < N_CHARS; c++) {
u8 sheng_s = s - 1;
- auto trans_for_c = (const char *)&m->sheng_masks[c];
+ auto trans_for_c = reinterpret_cast<const char *>(&m->sheng_masks[c]);
assert(sheng_s < sizeof(m128));
u8 raw_succ = trans_for_c[sheng_s];
if (raw_succ == m->sheng_end - 1) {
}
}
} else if (n->type == MCSHENG_NFA_8) {
- const u8 *succ_table = (const u8 *)((const char *)m + sizeof(mcsheng));
+ const u8 *succ_table = reinterpret_cast<const u8 *>(reinterpret_cast<const char *>(m) + sizeof(mcsheng));
for (u16 c = 0; c < N_CHARS; c++) {
u32 normal_id = s - m->sheng_end;
t[c] = succ_table[(normal_id << as) + m->remap[c]];
}
} else {
u16 base_s = s;
- const char *winfo_base = (const char *)n + m->sherman_offset;
+ const char *winfo_base = reinterpret_cast<const char *>(n) + m->sherman_offset;
const char *state_base
= winfo_base + SHERMAN_FIXED_SIZE * (s - m->sherman_limit);
assert(base_s >= m->sheng_end);
}
- const u16 *succ_table = (const u16 *)((const char *)m
+ const u16 *succ_table = reinterpret_cast<const u16 *>(reinterpret_cast<const char *>(m)
+ sizeof(mcsheng));
for (u16 c = 0; c < N_CHARS; c++) {
u32 normal_id = base_s - m->sheng_end;
if (s >= m->sherman_limit) {
UNUSED char type = *(state_base + SHERMAN_TYPE_OFFSET);
assert(type == SHERMAN_STATE);
- u8 len = *(const u8 *)(SHERMAN_LEN_OFFSET + state_base);
+ u8 len = *(reinterpret_cast<const u8 *>(SHERMAN_LEN_OFFSET + state_base));
const char *chars = state_base + SHERMAN_CHARS_OFFSET;
- const u16 *states = (const u16 *)(state_base
+ const u16 *states = reinterpret_cast<const u16 *>(state_base
+ SHERMAN_STATES_OFFSET(len));
for (u8 i = 0; i < len; i++) {
for (u16 c = 0; c < N_CHARS; c++) {
if (m->remap[c] == chars[i]) {
- t[c] = unaligned_load_u16((const u8*)&states[i]);
+ t[c] = unaligned_load_u16(reinterpret_cast<const u8*>(&states[i]));
}
}
}
static
const mstate_aux *getAux64(const NFA *n, dstate_id_t i) {
- auto *m = (const mcsheng64 *)getImplNfa(n);
- auto *aux_base = (const mstate_aux *)((const char *)n + m->aux_offset);
+ auto *m = reinterpret_cast<const mcsheng64 *>(getImplNfa(n));
+ auto *aux_base = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(n) + m->aux_offset);
const mstate_aux *aux = aux_base + i;
- assert((const char *)aux < (const char *)n + m->length);
+ assert(reinterpret_cast<const char *>(aux) < reinterpret_cast<const char *>(n) + m->length);
return aux;
}
static
void next_states64(const NFA *n, u16 s, u16 *t) {
- const mcsheng64 *m = (const mcsheng64 *)getImplNfa(n);
+ const mcsheng64 *m = reinterpret_cast<const mcsheng64 *>(getImplNfa(n));
const mstate_aux *aux = getAux64(n, s);
const u32 as = m->alphaShift;
assert(s != DEAD_STATE);
if (s < m->sheng_end) {
for (u16 c = 0; c < N_CHARS; c++) {
u8 sheng_s = s - 1;
- auto trans_for_c = (const char *)&m->sheng_succ_masks[c];
+ auto trans_for_c = reinterpret_cast<const char *>(&m->sheng_succ_masks[c]);
assert(sheng_s < sizeof(m512));
u8 raw_succ = trans_for_c[sheng_s];
if (raw_succ == m->sheng_end - 1) {
}
}
} else if (n->type == MCSHENG_64_NFA_8) {
- const u8 *succ_table = (const u8 *)((const char *)m + sizeof(mcsheng64));
+ const u8 *succ_table = reinterpret_cast<const u8 *>(reinterpret_cast<const char *>(m) + sizeof(mcsheng64));
for (u16 c = 0; c < N_CHARS; c++) {
u32 normal_id = s - m->sheng_end;
t[c] = succ_table[(normal_id << as) + m->remap[c]];
}
} else {
u16 base_s = s;
- const char *winfo_base = (const char *)n + m->sherman_offset;
+ const char *winfo_base = reinterpret_cast<const char *>(n) + m->sherman_offset;
const char *state_base
= winfo_base + SHERMAN_FIXED_SIZE * (s - m->sherman_limit);
assert(base_s >= m->sheng_end);
}
- const u16 *succ_table = (const u16 *)((const char *)m
+ const u16 *succ_table = reinterpret_cast<const u16 *>(reinterpret_cast<const char *>(m)
+ sizeof(mcsheng64));
for (u16 c = 0; c < N_CHARS; c++) {
u32 normal_id = base_s - m->sheng_end;
if (s >= m->sherman_limit) {
UNUSED char type = *(state_base + SHERMAN_TYPE_OFFSET);
assert(type == SHERMAN_STATE);
- u8 len = *(const u8 *)(SHERMAN_LEN_OFFSET + state_base);
+ u8 len = *(reinterpret_cast<const u8 *>(SHERMAN_LEN_OFFSET + state_base));
const char *chars = state_base + SHERMAN_CHARS_OFFSET;
- const u16 *states = (const u16 *)(state_base
+ const u16 *states = reinterpret_cast<const u16 *>(state_base
+ SHERMAN_STATES_OFFSET(len));
for (u8 i = 0; i < len; i++) {
for (u16 c = 0; c < N_CHARS; c++) {
if (m->remap[c] == chars[i]) {
- t[c] = unaligned_load_u16((const u8*)&states[i]);
+ t[c] = unaligned_load_u16(reinterpret_cast<const u8*>(&states[i]));
}
}
}
"label = \"%u%s\" ]; \n", i, i, isSherman ? "w":"");
if (aux->accel_offset) {
- dumpAccelDot(f, i, (const union AccelAux *)
- ((const char *)m + aux->accel_offset));
+ dumpAccelDot(f, i, reinterpret_cast<const union AccelAux *>
+ (reinterpret_cast<const char *>(m) + aux->accel_offset));
}
if (i && i < m->sheng_end) {
}
if (isSherman) {
- const char *winfo_base = (const char *)n + m->sherman_offset;
+ const char *winfo_base = reinterpret_cast<const char *>(n) + m->sherman_offset;
const char *state_base
= winfo_base + SHERMAN_FIXED_SIZE * (i - m->sherman_limit);
- assert(state_base < (const char *)m + m->length - sizeof(NFA));
- UNUSED u8 type = *(const u8 *)(state_base + SHERMAN_TYPE_OFFSET);
+ assert(state_base < reinterpret_cast<const char *>(m) + m->length - sizeof(NFA));
+ UNUSED u8 type = *(reinterpret_cast<const u8 *>(state_base + SHERMAN_TYPE_OFFSET));
assert(type == SHERMAN_STATE);
fprintf(f, "%u [ fillcolor = lightblue style=filled ];\n", i);
- u16 daddy = *(const u16 *)(state_base + SHERMAN_DADDY_OFFSET);
+ u16 daddy = *(reinterpret_cast<const u16 *>(state_base + SHERMAN_DADDY_OFFSET));
if (daddy) {
fprintf(f, "%u -> %u [ color=royalblue style=dashed weight=0.1]\n",
i, daddy);
"label = \"%u%s\" ]; \n", i, i, isSherman ? "w":"");
if (aux->accel_offset) {
- dumpAccelDot(f, i, (const union AccelAux *)
- ((const char *)m + aux->accel_offset));
+ dumpAccelDot(f, i, reinterpret_cast<const union AccelAux *>
+ (reinterpret_cast<const char *>(m) + aux->accel_offset));
}
if (i && i < m->sheng_end) {
}
if (isSherman) {
- const char *winfo_base = (const char *)n + m->sherman_offset;
+ const char *winfo_base = reinterpret_cast<const char *>(n) + m->sherman_offset;
const char *state_base
= winfo_base + SHERMAN_FIXED_SIZE * (i - m->sherman_limit);
- assert(state_base < (const char *)m + m->length - sizeof(NFA));
- UNUSED u8 type = *(const u8 *)(state_base + SHERMAN_TYPE_OFFSET);
+ assert(state_base < reinterpret_cast<const char *>(m) + m->length - sizeof(NFA));
+ UNUSED u8 type = *(reinterpret_cast<const u8 *>(state_base + SHERMAN_TYPE_OFFSET));
assert(type == SHERMAN_STATE);
fprintf(f, "%u [ fillcolor = lightblue style=filled ];\n", i);
- u16 daddy = *(const u16 *)(state_base + SHERMAN_DADDY_OFFSET);
+ u16 daddy = *(reinterpret_cast<const u16 *>(state_base + SHERMAN_DADDY_OFFSET));
if (daddy) {
fprintf(f, "%u -> %u [ color=royalblue style=dashed weight=0.1]\n",
i, daddy);
static
void dump_dot_16(const NFA *nfa, FILE *f) {
- auto *m = (const mcsheng *)getImplNfa(nfa);
+ auto *m = reinterpret_cast<const mcsheng *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
static
void dump_dot_8(const NFA *nfa, FILE *f) {
- auto m = (const mcsheng *)getImplNfa(nfa);
+ auto m = reinterpret_cast<const mcsheng *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
continue;
}
- auto accel = (const AccelAux *)((const char *)m + aux[i].accel_offset);
+ auto accel = reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(m) + aux[i].accel_offset);
fprintf(f, "%05hu ", i);
dumpAccelInfo(f, *accel);
}
static
void dump_text_16(const NFA *nfa, FILE *f) {
- auto *m = (const mcsheng *)getImplNfa(nfa);
- auto *aux = (const mstate_aux *)((const char *)nfa + m->aux_offset);
+ auto *m = reinterpret_cast<const mcsheng *>(getImplNfa(nfa));
+ auto *aux = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(nfa) + m->aux_offset);
fprintf(f, "mcsheng 16\n");
dumpCommonHeader(f, m);
static
void dump_text_8(const NFA *nfa, FILE *f) {
- auto m = (const mcsheng *)getImplNfa(nfa);
- auto aux = (const mstate_aux *)((const char *)nfa + m->aux_offset);
+ auto m = reinterpret_cast<const mcsheng *>(getImplNfa(nfa));
+ auto aux = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(nfa) + m->aux_offset);
fprintf(f, "mcsheng 8\n");
dumpCommonHeader(f, m);
static
void dump64_dot_16(const NFA *nfa, FILE *f) {
- auto *m = (const mcsheng64 *)getImplNfa(nfa);
+ auto *m = reinterpret_cast<const mcsheng64 *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
static
void dump64_dot_8(const NFA *nfa, FILE *f) {
- auto m = (const mcsheng64 *)getImplNfa(nfa);
+ auto m = reinterpret_cast<const mcsheng64 *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
continue;
}
- auto accel = (const AccelAux *)((const char *)m + aux[i].accel_offset);
+ auto accel = reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(m) + aux[i].accel_offset);
fprintf(f, "%05hu ", i);
dumpAccelInfo(f, *accel);
}
static
void dump64_text_8(const NFA *nfa, FILE *f) {
- auto m = (const mcsheng64 *)getImplNfa(nfa);
- auto aux = (const mstate_aux *)((const char *)nfa + m->aux_offset);
+ auto m = reinterpret_cast<const mcsheng64 *>(getImplNfa(nfa));
+ auto aux = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(nfa) + m->aux_offset);
fprintf(f, "mcsheng 64-8\n");
dumpCommonHeader64(f, m);
static
void dump64_text_16(const NFA *nfa, FILE *f) {
- auto *m = (const mcsheng64 *)getImplNfa(nfa);
- auto *aux = (const mstate_aux *)((const char *)nfa + m->aux_offset);
+ auto *m = reinterpret_cast<const mcsheng64 *>(getImplNfa(nfa));
+ auto *aux = reinterpret_cast<const mstate_aux *>(reinterpret_cast<const char *>(nfa) + m->aux_offset);
fprintf(f, "mcsheng 64-16\n");
dumpCommonHeader64(f, m);
case MPV_SHUFTI:
fprintf(f, "shufti\n");
fprintf(f, "lo %s\n",
- dumpMask((const u8 *)&k->u.shuf.mask_lo, 128).c_str());
+ dumpMask(reinterpret_cast<const u8 *>(&k->u.shuf.mask_lo), 128).c_str());
fprintf(f, "hi %s\n",
- dumpMask((const u8 *)&k->u.shuf.mask_hi, 128).c_str());
+ dumpMask(reinterpret_cast<const u8 *>(&k->u.shuf.mask_hi), 128).c_str());
break;
case MPV_TRUFFLE:
fprintf(f, "truffle\n");
}
void nfaExecMpv_dump(const NFA *nfa, const string &base) {
- const mpv *m = (const mpv *)getImplNfa(nfa);
+ const mpv *m = reinterpret_cast<const mpv *>(getImplNfa(nfa));
StdioFile f(base + ".txt", "w");
fprintf(f, "initial kilopuffs %u - %u\n", m->top_kilo_begin,
m->top_kilo_end - 1);
- const mpv_kilopuff *k = (const mpv_kilopuff *)(m + 1);
+ const mpv_kilopuff *k = reinterpret_cast<const mpv_kilopuff *>(m + 1);
for (u32 i = 0; i < m->kilo_count; i++) {
fprintf(f, "\nKILOPUFF %u\n", i);
dumpKilo(f, m, k++);
= "LimEx "#mlt_size; \
template<> struct getDescription<LIMEX_NFA_##mlt_size> { \
static string call(const void *p) { \
- return getDescriptionLimEx<LIMEX_NFA_##mlt_size>((const NFA *)p); \
+ return getDescriptionLimEx<LIMEX_NFA_##mlt_size>(reinterpret_cast<const NFA *>(p)); \
} \
};)
const sstate_aux *get_aux(const NFA *n, dstate_id_t i) {
assert(n && isSheng16Type(n->type));
- const sheng *s = (const sheng *)getImplNfa(n);
+ const sheng *s = reinterpret_cast<const sheng *>(getImplNfa(n));
const sstate_aux *aux_base =
- (const sstate_aux *)((const char *)n + s->aux_offset);
+ reinterpret_cast<const sstate_aux *>(reinterpret_cast<const char *>(n) + s->aux_offset);
const sstate_aux *aux = aux_base + i;
- assert((const char *)aux < (const char *)s + s->length);
+ assert(reinterpret_cast<const char *>(aux) < reinterpret_cast<const char *>(s) + s->length);
return aux;
}
const sstate_aux *get_aux32(const NFA *n, dstate_id_t i) {
assert(n && isSheng32Type(n->type));
- const sheng32 *s = (const sheng32 *)getImplNfa(n);
+ const sheng32 *s = reinterpret_cast<const sheng32 *>(getImplNfa(n));
const sstate_aux *aux_base =
- (const sstate_aux *)((const char *)n + s->aux_offset);
+ reinterpret_cast<const sstate_aux *>(reinterpret_cast<const char *>(n) + s->aux_offset);
const sstate_aux *aux = aux_base + i;
- assert((const char *)aux < (const char *)s + s->length);
+ assert(reinterpret_cast<const char *>(aux) < reinterpret_cast<const char *>(s) + s->length);
return aux;
}
const sstate_aux *get_aux64(const NFA *n, dstate_id_t i) {
assert(n && isSheng64Type(n->type));
- const sheng64 *s = (const sheng64 *)getImplNfa(n);
+ const sheng64 *s = reinterpret_cast<const sheng64 *>(getImplNfa(n));
const sstate_aux *aux_base =
- (const sstate_aux *)((const char *)n + s->aux_offset);
+ reinterpret_cast<const sstate_aux *>(reinterpret_cast<const char *>(n) + s->aux_offset);
const sstate_aux *aux = aux_base + i;
- assert((const char *)aux < (const char *)s + s->length);
+ assert(reinterpret_cast<const char *>(aux) < reinterpret_cast<const char *>(s) + s->length);
return aux;
}
static
void nfaExecSheng_dumpText(const NFA *nfa, FILE *f) {
assert(nfa->type == SHENG_NFA);
- const sheng *s = (const sheng *)getImplNfa(nfa);
+ const sheng *s = reinterpret_cast<const sheng *>(getImplNfa(nfa));
fprintf(f, "sheng DFA\n");
dumpHeader(f, s);
if (aux->accept) {
fprintf(f, "report list:\n");
const report_list *rl =
- (const report_list *)((const char *)nfa + aux->accept);
+ reinterpret_cast<const report_list *>(reinterpret_cast<const char *>(nfa) + aux->accept);
dumpReports(f, rl);
}
if (aux->accept_eod) {
fprintf(f, "EOD report list:\n");
const report_list *rl =
- (const report_list *)((const char *)nfa + aux->accept_eod);
+ reinterpret_cast<const report_list *>(reinterpret_cast<const char *>(nfa) + aux->accept_eod);
dumpReports(f, rl);
}
if (aux->accel) {
fprintf(f, "accel:\n");
const AccelAux *accel =
- (const AccelAux *)((const char *)nfa + aux->accel);
+ reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(nfa) + aux->accel);
dumpAccelInfo(f, *accel);
}
}
static
void nfaExecSheng32_dumpText(const NFA *nfa, FILE *f) {
assert(nfa->type == SHENG_NFA_32);
- const sheng32 *s = (const sheng32 *)getImplNfa(nfa);
+ const sheng32 *s = reinterpret_cast<const sheng32 *>(getImplNfa(nfa));
fprintf(f, "sheng32 DFA\n");
dumpHeader32(f, s);
if (aux->accept) {
fprintf(f, "report list:\n");
const report_list *rl =
- (const report_list *)((const char *)nfa + aux->accept);
+ reinterpret_cast<const report_list *>(reinterpret_cast<const char *>(nfa) + aux->accept);
dumpReports(f, rl);
}
if (aux->accept_eod) {
fprintf(f, "EOD report list:\n");
const report_list *rl =
- (const report_list *)((const char *)nfa + aux->accept_eod);
+ reinterpret_cast<const report_list *>(reinterpret_cast<const char *>(nfa) + aux->accept_eod);
dumpReports(f, rl);
}
if (aux->accel) {
fprintf(f, "accel:\n");
const AccelAux *accel =
- (const AccelAux *)((const char *)nfa + aux->accel);
+ reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(nfa) + aux->accel);
dumpAccelInfo(f, *accel);
}
}
static
void nfaExecSheng64_dumpText(const NFA *nfa, FILE *f) {
assert(nfa->type == SHENG_NFA_64);
- const sheng64 *s = (const sheng64 *)getImplNfa(nfa);
+ const sheng64 *s = reinterpret_cast<const sheng64 *>(getImplNfa(nfa));
fprintf(f, "sheng64 DFA\n");
dumpHeader64(f, s);
if (aux->accept) {
fprintf(f, "report list:\n");
const report_list *rl =
- (const report_list *)((const char *)nfa + aux->accept);
+ reinterpret_cast<const report_list *>(reinterpret_cast<const char *>(nfa) + aux->accept);
dumpReports(f, rl);
}
if (aux->accept_eod) {
fprintf(f, "EOD report list:\n");
const report_list *rl =
- (const report_list *)((const char *)nfa + aux->accept_eod);
+ reinterpret_cast<const report_list *>(reinterpret_cast<const char *>(nfa) + aux->accept_eod);
dumpReports(f, rl);
}
if (aux->accel) {
fprintf(f, "accel:\n");
const AccelAux *accel =
- (const AccelAux *)((const char *)nfa + aux->accel);
+ reinterpret_cast<const AccelAux *>(reinterpret_cast<const char *>(nfa) + aux->accel);
dumpAccelInfo(f, *accel);
}
}
static
void shengGetTransitions(const NFA *n, u16 state, u16 *t) {
assert(isSheng16Type(n->type));
- const sheng *s = (const sheng *)getImplNfa(n);
+ const sheng *s = reinterpret_cast<const sheng *>(getImplNfa(n));
const sstate_aux *aux = get_aux(n, state);
for (unsigned i = 0; i < N_CHARS; i++) {
static
void sheng32GetTransitions(const NFA *n, u16 state, u16 *t) {
assert(isSheng32Type(n->type));
- const sheng32 *s = (const sheng32 *)getImplNfa(n);
+ const sheng32 *s = reinterpret_cast<const sheng32 *>(getImplNfa(n));
const sstate_aux *aux = get_aux32(n, state);
for (unsigned i = 0; i < N_CHARS; i++) {
static
void sheng64GetTransitions(const NFA *n, u16 state, u16 *t) {
assert(isSheng64Type(n->type));
- const sheng64 *s = (const sheng64 *)getImplNfa(n);
+ const sheng64 *s = reinterpret_cast<const sheng64 *>(getImplNfa(n));
const sstate_aux *aux = get_aux64(n, state);
for (unsigned i = 0; i < N_CHARS; i++) {
static
void nfaExecSheng_dumpDot(const NFA *nfa, FILE *f) {
assert(nfa->type == SHENG_NFA);
- const sheng *s = (const sheng *)getImplNfa(nfa);
+ const sheng *s = reinterpret_cast<const sheng *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
static
void nfaExecSheng32_dumpDot(const NFA *nfa, FILE *f) {
assert(nfa->type == SHENG_NFA_32);
- const sheng32 *s = (const sheng32 *)getImplNfa(nfa);
+ const sheng32 *s = reinterpret_cast<const sheng32 *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
static
void nfaExecSheng64_dumpDot(const NFA *nfa, FILE *f) {
assert(nfa->type == SHENG_NFA_64);
- const sheng64 *s = (const sheng64 *)getImplNfa(nfa);
+ const sheng64 *s = reinterpret_cast<const sheng64 *>(getImplNfa(nfa));
dumpDotPreambleDfa(f);
namespace ue2 {
void nfaExecTamarama_dump(const struct NFA *nfa, const string &base) {
- const Tamarama *t = (const Tamarama *)getImplNfa(nfa);
+ const Tamarama *t = reinterpret_cast<const Tamarama *>(getImplNfa(nfa));
StdioFile f(base + ".txt", "w");
fprintf(f, "\n");
const u32 *subOffset =
- (const u32 *)((const char *)t + sizeof(struct Tamarama) +
+ reinterpret_cast<const u32 *>(reinterpret_cast<const char *>(t) + sizeof(struct Tamarama) +
t->numSubEngines * sizeof(u32));
for (u32 i = 0; i < t->numSubEngines; i++) {
- const NFA *sub = (const struct NFA *)((const char *)t + subOffset[i]);
+ const NFA *sub = reinterpret_cast<const struct NFA *>(reinterpret_cast<const char *>(t) + subOffset[i]);
stringstream sssub;
sssub << base << "_sub_" << i;
template <>
really_inline SuperVector<32> SuperVector<32>::loadu(void const *ptr)
{
- return {SuperVector<32>(_mm256_loadu_si256((const m256 *)ptr))};
+ return {SuperVector<32>(_mm256_loadu_si256(reinterpret_cast<const m256 *>(ptr)))};
}
template <>
{
assert(ISALIGNED_N(ptr, alignof(SuperVector::size)));
ptr = vectorscan_assume_aligned(ptr, SuperVector::size);
- return {SuperVector<32>(_mm256_load_si256((const m256 *)ptr))};
+ return {SuperVector<32>(_mm256_load_si256(reinterpret_cast<const m256 *>(ptr)))};
}
template <>
{
#ifdef HAVE_AVX512
u32 mask = (~0ULL) >> (32 - len);
- SuperVector<32> v = SuperVector<32>(_mm256_mask_loadu_epi8(Zeroes().u.v256[0], mask, (const m256 *)ptr));
+ SuperVector<32> v = SuperVector<32>(_mm256_mask_loadu_epi8(Zeroes().u.v256[0], mask, reinterpret_cast<const m256 *>(ptr)));
v.print8("v");
return v;
#else
SuperVector<32> mask = Ones_vshr(32 -len);
mask.print8("mask");
(Ones() >> (32 - len)).print8("mask");
- SuperVector<32> v = SuperVector<32>(_mm256_loadu_si256((const m256 *)ptr));
+ SuperVector<32> v = SuperVector<32>(_mm256_loadu_si256(reinterpret_cast<const m256 *>(ptr)));
v.print8("v");
return mask & v;
#endif
template <>
really_inline SuperVector<64> SuperVector<64>::loadu(void const *ptr)
{
- return {SuperVector<64>(_mm512_loadu_si512((const m512 *)ptr))};
+ return {SuperVector<64>(_mm512_loadu_si512(reinterpret_cast<const m512 *>(ptr)))};
}
template <>
{
assert(ISALIGNED_N(ptr, alignof(SuperVector::size)));
ptr = vectorscan_assume_aligned(ptr, SuperVector::size);
- return {SuperVector<64>(_mm512_load_si512((const m512 *)ptr))};
+ return {SuperVector<64>(_mm512_load_si512(reinterpret_cast<const m512 *>(ptr)))};
}
template <>
{
u64a mask = (~0ULL) >> (64 - len);
DEBUG_PRINTF("mask = %016llx\n", mask);
- SuperVector<64> v = SuperVector<64>(_mm512_mask_loadu_epi8(Zeroes().u.v512[0], mask, (const m512 *)ptr));
+ SuperVector<64> v = SuperVector<64>(_mm512_mask_loadu_epi8(Zeroes().u.v512[0], mask, reinterpret_cast<const m512 *>(ptr)));
v.print8("v");
return v;
}