File-Raw-Separated

 view release on metacpan or  search on metacpan

Separated.xs  view on Meta::CPAN



# =====================================================================
# Parser entry points
# =====================================================================
#
# Nine XSUBs, three logical groups, all thin shims over the do_* helpers
# above:
#
#   Unified (dialect read from opts hash, defaults to csv):
#     parse_buf($input [, \%opts])               -> \@rows
#     parse_buf_each($input, $cb [, \%opts])
#     parse_stream($path, $cb [, \%opts])
#
#   CSV-pinned (dialect key in opts ignored):
#     csv_parse_buf, csv_parse_buf_each, csv_parse_stream
#
#   TSV-pinned:
#     tsv_parse_buf, tsv_parse_buf_each, tsv_parse_stream
#
# xsubpp registers them in package File::Raw::Separated; users get them
# under `file_` prefix in their own namespace via `use File::Raw::Separated
# qw(import|:all|:unified|:csv|:tsv|<name>)` (see import dispatcher above).
#
# parse_stream / *_parse_stream open the file directly via PerlLIO,
# bypassing File::Raw's read hook (no recursion / no double-parse).

SV *
parse_buf(input, opts = NULL)
        SV *input
        SV *opts
    CODE:
        RETVAL = do_parse_buf(aTHX_ "parse_buf", input, opts, DIALECT_AUTO);
    OUTPUT:
        RETVAL

SV *
csv_parse_buf(input, opts = NULL)
        SV *input
        SV *opts
    CODE:
        RETVAL = do_parse_buf(aTHX_ "csv_parse_buf", input, opts, DIALECT_CSV);
    OUTPUT:
        RETVAL

SV *
tsv_parse_buf(input, opts = NULL)
        SV *input
        SV *opts
    CODE:
        RETVAL = do_parse_buf(aTHX_ "tsv_parse_buf", input, opts, DIALECT_TSV);
    OUTPUT:
        RETVAL


void
parse_buf_each(input, code, opts = NULL)
        SV *input
        SV *code
        SV *opts
    PPCODE:
        do_parse_buf_each(aTHX_ "parse_buf_each", input, code, opts, DIALECT_AUTO);
        XSRETURN_EMPTY;

void
csv_parse_buf_each(input, code, opts = NULL)
        SV *input
        SV *code
        SV *opts
    PPCODE:
        do_parse_buf_each(aTHX_ "csv_parse_buf_each", input, code, opts, DIALECT_CSV);
        XSRETURN_EMPTY;

void
tsv_parse_buf_each(input, code, opts = NULL)
        SV *input
        SV *code
        SV *opts
    PPCODE:
        do_parse_buf_each(aTHX_ "tsv_parse_buf_each", input, code, opts, DIALECT_TSV);
        XSRETURN_EMPTY;


void
parse_stream(path, code, opts = NULL)
        SV *path
        SV *code
        SV *opts
    PPCODE:
        do_parse_stream(aTHX_ "parse_stream", path, code, opts, DIALECT_AUTO);
        XSRETURN_EMPTY;

void
csv_parse_stream(path, code, opts = NULL)
        SV *path
        SV *code
        SV *opts
    PPCODE:
        do_parse_stream(aTHX_ "csv_parse_stream", path, code, opts, DIALECT_CSV);
        XSRETURN_EMPTY;

void
tsv_parse_stream(path, code, opts = NULL)
        SV *path
        SV *code
        SV *opts
    PPCODE:
        do_parse_stream(aTHX_ "tsv_parse_stream", path, code, opts, DIALECT_TSV);
        XSRETURN_EMPTY;



( run in 0.540 second using v1.01-cache-2.11-cpan-5511b514fd6 )