Changeset 100 for trunk/src/byteplex.c


Ignore:
Timestamp:
Apr 14, 2008, 6:34:30 PM (11 years ago)
Author:
lindanl
Message:

Parsers for internal and external entities.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/byteplex.c

    r68 r100  
    2222
    2323template <CodeUnit_Base C>
    24 XML_Buffer<C>::XML_Buffer(FILE * inputfile)
     24XML_Buffer<C>::XML_Buffer()
    2525        : Byteplex() {
    26         infile = inputfile;
    2726        /* For 8-bit code units, the input buffer is a also used directly
    2827           as the pseudo-ASCII buffer; make sure that there is room for
     
    3534}
    3635
    37 Extended_ASCII_8_Buffer::Extended_ASCII_8_Buffer(FILE * infile)
    38         : XML_Buffer<ASCII>(infile) {
     36Extended_ASCII_8_Buffer::Extended_ASCII_8_Buffer()
     37        : XML_Buffer<ASCII>() {
    3938        x8data = src_buffer;
    4039        // Set the sentinel for ScanToQuote,ScanWS in reading XML/text decls.
     
    4241}
    4342
    44 EBCDIC_Buffer::EBCDIC_Buffer(FILE * infile)
    45         : XML_Buffer<EBCDIC>(infile) {
     43EBCDIC_Buffer::EBCDIC_Buffer()
     44        : XML_Buffer<EBCDIC>() {
    4645        x8data = src_buffer;
    4746        // Set the sentinel for ScanToQuote,ScanWS in reading XML/text decls.
     
    4948}
    5049
    51 U16_Buffer::U16_Buffer(FILE * infile)
    52         : XML_Buffer<ASCII>(infile) {
     50U16_Buffer::U16_Buffer()
     51        : XML_Buffer<ASCII>() {
    5352
    5453        src_buffer = simd_new((BYTEPLEX_SIZE/PACKSIZE)*2);
     
    6766}
    6867
    69 U16LE_Buffer::U16LE_Buffer(FILE * infile)
    70         : U16_Buffer(infile) {
    71 }
    72 
    73 U16BE_Buffer::U16BE_Buffer(FILE * infile)
    74         : U16_Buffer(infile) {
    75 }
    76 
    77 U32_Buffer::U32_Buffer(FILE * infile)
    78         : XML_Buffer<ASCII>(infile) {
     68U16LE_Buffer::U16LE_Buffer()
     69        : U16_Buffer() {
     70}
     71
     72U16BE_Buffer::U16BE_Buffer()
     73        : U16_Buffer() {
     74}
     75
     76U32_Buffer::U32_Buffer()
     77        : XML_Buffer<ASCII>() {
    7978
    8079        src_buffer = simd_new((BYTEPLEX_SIZE/PACKSIZE)*4);
     
    9897}
    9998
    100 U32LE_Buffer::U32LE_Buffer(FILE * infile)
    101         : U32_Buffer(infile) {
    102 }
    103 
    104 U32BE_Buffer::U32BE_Buffer(FILE * infile)
    105         : U32_Buffer(infile) {
    106 }
    107 
    108 U32_2143_Buffer::U32_2143_Buffer(FILE * infile)
    109         : U32_Buffer(infile) {
    110 }
    111 
    112 U32_3412_Buffer::U32_3412_Buffer(FILE * infile)
    113         : U32_Buffer(infile) {
     99U32LE_Buffer::U32LE_Buffer()
     100        : U32_Buffer() {
     101}
     102
     103U32BE_Buffer::U32BE_Buffer()
     104        : U32_Buffer() {
     105}
     106
     107U32_2143_Buffer::U32_2143_Buffer()
     108        : U32_Buffer() {
     109}
     110
     111U32_3412_Buffer::U32_3412_Buffer()
     112        : U32_Buffer() {
    114113}
    115114
     
    314313}
    315314
    316 Byteplex * Byteplex::ByteplexFactory(Model_Info * m, FILE * inputfile) {
    317         if (likely(m->code_unit_size == SingleByte)) {
    318                 if (likely(m->code_unit_base == ASCII))
    319                         return new Extended_ASCII_8_Buffer(inputfile);
    320                 return new EBCDIC_Buffer(inputfile);
    321         }
    322         else if (likely(m->code_unit_size == DoubleByte)) {
    323                 if (likely(m->byte_order == BigEndian))
    324                         return new U16BE_Buffer(inputfile);
    325                 else return new U16LE_Buffer(inputfile);
    326         }
    327         else switch (m->byte_order) {
    328                 case BigEndian: return new U32BE_Buffer(inputfile);
    329                 case LittleEndian: return new U32LE_Buffer(inputfile);
    330                 case Unusual_2143: return new U32_2143_Buffer(inputfile);
    331                 case Unusual_3412: return new U32_3412_Buffer(inputfile);
     315Byteplex * Byteplex::ByteplexFactory(Entity_Info * e) {
     316        Byteplex * b;
     317        if (likely(e->code_unit_size == SingleByte)) {
     318                if (likely(e->code_unit_base == ASCII))
     319                        b = new Extended_ASCII_8_Buffer();
     320                else b = new EBCDIC_Buffer();
     321        }
     322        else if (likely(e->code_unit_size == DoubleByte)) {
     323                if (likely(e->byte_order == BigEndian))
     324                        b = new U16BE_Buffer();
     325                else b = new U16LE_Buffer();
     326        }
     327        else switch (e->byte_order) {
     328                case BigEndian: b = new U32BE_Buffer(); break;
     329                case LittleEndian: b = new U32LE_Buffer(); break;
     330                case Unusual_2143: b = new U32_2143_Buffer(); break;
     331                case Unusual_3412: b = new U32_3412_Buffer(); break;
    332332        }       
    333 }
    334 
     333        return b;
     334}
     335
     336Byteplex * Byteplex::ByteplexFactory(Entity_Info * e, FILE * inputfile) {
     337        Byteplex * b = ByteplexFactory(e);
     338        b->infile = inputfile;
     339        return b;
     340}
     341       
     342Byteplex * Byteplex::ByteplexFactory(Entity_Info * e, unsigned char * buffer_bytes, int buffer_size) {
     343        Byteplex * b = ByteplexFactory(e);
     344        memcpy(b->src_buffer, buffer_bytes, buffer_size);
     345    printf("buffer_bytes = %s\n", buffer_bytes);
     346        b->units_in_buffer = buffer_size / e->code_unit_size;
     347        b->packs_in_buffer = (b->units_in_buffer + PACKSIZE -1)/PACKSIZE;
     348        return b;
     349}
Note: See TracChangeset for help on using the changeset viewer.