static pANTLR3_INPUT_STREAM antlr3CreateLineBufferedStream(std::istream& in) { // Pointer to the input stream we are going to create // pANTLR3_INPUT_STREAM input; if (!in) { return NULL; } // Allocate memory for the input stream structure // input = (pANTLR3_INPUT_STREAM) ANTLR3_CALLOC(1, sizeof(ANTLR3_LINE_BUFFERED_INPUT_STREAM)); if (input == NULL) { return NULL; } // Structure was allocated correctly, now we can install the pointer // input->data = malloc(1024); input->isAllocated = ANTLR3_FALSE; ((pANTLR3_LINE_BUFFERED_INPUT_STREAM)input)->in = ∈ // Call the common 8 bit input stream handler // initialization. // #ifdef CVC4_ANTLR3_OLD_INPUT_STREAM antlr3AsciiSetupStream(input, ANTLR3_CHARSTREAM); #else /* CVC4_ANTLR3_OLD_INPUT_STREAM */ antlr38BitSetupStream(input); // In some libantlr3c 3.4-beta versions, this call is not included in the above. // This is probably an erroneously-deleted line in the libantlr3c source since 3.2. antlr3GenericSetupStream(input); #endif /* CVC4_ANTLR3_OLD_INPUT_STREAM */ return input; }
pANTLR3_INPUT_STREAM MemoryMappedInputBufferNew(const std::string& filename) { // Pointer to the input stream we are going to create // pANTLR3_INPUT_STREAM input; ANTLR3_UINT32 status; // Allocate memory for the input stream structure // input = (pANTLR3_INPUT_STREAM) ANTLR3_CALLOC(1, sizeof(ANTLR3_INPUT_STREAM)); if(input == NULL) { return NULL; } // Structure was allocated correctly, now we can read the file. // status = MemoryMapFile(input, filename); // Call the common 8 bit ASCII input stream handler // Initializer type thingy doobry function. // #ifdef CVC4_ANTLR3_OLD_INPUT_STREAM antlr3AsciiSetupStream(input, ANTLR3_CHARSTREAM); #else /* CVC4_ANTLR3_OLD_INPUT_STREAM */ antlr38BitSetupStream(input); #endif /* CVC4_ANTLR3_OLD_INPUT_STREAM */ // Now we can set up the file name // input->istream->streamName = input->strFactory->newStr(input->strFactory, (uint8_t*) filename.c_str()); input->fileName = input->istream->streamName; input->free = UnmapFile; if(status != ANTLR3_SUCCESS) { input->close(input); return NULL; } return input; }
static void setupInputStream(pANTLR3_INPUT_STREAM input) { #if 0 ANTLR3_BOOLEAN isBigEndian; // Used to determine the endianness of the machine we are currently // running on. // ANTLR3_UINT16 bomTest = 0xFEFF; // What endianess is the machine we are running on? If the incoming // encoding endianess is the same as this machine's natural byte order // then we can use more efficient API calls. // if (*((pANTLR3_UINT8)(&bomTest)) == 0xFE) { isBigEndian = ANTLR3_TRUE; } else { isBigEndian = ANTLR3_FALSE; } // What encoding did the user tell us {s}he thought it was? I am going // to get sick of the questions on antlr-interest, I know I am. // switch (input->encoding) { case ANTLR3_ENC_UTF8: // See if there is a BOM at the start of this UTF-8 sequence // and just eat it if there is. Windows .TXT files have this for instance // as it identifies UTF-8 even though it is of no consequence for byte order // as UTF-8 does not have a byte order. // if ( (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar)) == 0xEF && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0xBB && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+2)) == 0xBF ) { // The UTF8 BOM is present so skip it // input->nextChar = (void *)((pANTLR3_UINT8)input->nextChar + 3); } // Install the UTF8 input routines // antlr3UTF8SetupStream(input); break; case ANTLR3_ENC_UTF16: // See if there is a BOM at the start of the input. If not then // we assume that the byte order is the natural order of this // machine (or it is really UCS2). If there is a BOM we determine if the encoding // is the same as the natural order of this machine. // if ( (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar)) == 0xFE && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0xFF ) { // BOM Present, indicates Big Endian // input->nextChar = (void *)((pANTLR3_UINT8)input->nextChar + 2); antlr3UTF16SetupStream(input, isBigEndian, ANTLR3_TRUE); } else if ( (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar)) == 0xFF && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0xFE ) { // BOM present, indicates Little Endian // input->nextChar = (void *)((pANTLR3_UINT8)input->nextChar + 2); antlr3UTF16SetupStream(input, isBigEndian, ANTLR3_FALSE); } else { // No BOM present, assume local computer byte order // antlr3UTF16SetupStream(input, isBigEndian, isBigEndian); } break; case ANTLR3_ENC_UTF32: // See if there is a BOM at the start of the input. If not then // we assume that the byte order is the natural order of this // machine. If there is we determine if the encoding // is the same as the natural order of this machine. // if ( (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar)) == 0x00 && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0x00 && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+2)) == 0xFE && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+3)) == 0xFF ) { // BOM Present, indicates Big Endian // input->nextChar = (void *)((pANTLR3_UINT8)input->nextChar + 4); antlr3UTF32SetupStream(input, isBigEndian, ANTLR3_TRUE); } else if ( (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar)) == 0xFF && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0xFE && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0x00 && (ANTLR3_UINT8)(*((pANTLR3_UINT8)input->nextChar+1)) == 0x00 ) { // BOM present, indicates Little Endian // input->nextChar = (void *)((pANTLR3_UINT8)input->nextChar + 4); antlr3UTF32SetupStream(input, isBigEndian, ANTLR3_FALSE); } else { // No BOM present, assume local computer byte order // antlr3UTF32SetupStream(input, isBigEndian, isBigEndian); } break; case ANTLR3_ENC_UTF16BE: // Encoding is definately Big Endian with no BOM // antlr3UTF16SetupStream(input, isBigEndian, ANTLR3_TRUE); break; case ANTLR3_ENC_UTF16LE: // Encoding is definately Little Endian with no BOM // antlr3UTF16SetupStream(input, isBigEndian, ANTLR3_FALSE); break; case ANTLR3_ENC_UTF32BE: // Encoding is definately Big Endian with no BOM // antlr3UTF32SetupStream(input, isBigEndian, ANTLR3_TRUE); break; case ANTLR3_ENC_UTF32LE: // Encoding is definately Little Endian with no BOM // antlr3UTF32SetupStream(input, isBigEndian, ANTLR3_FALSE); break; case ANTLR3_ENC_EBCDIC: // EBCDIC is basically the same as ASCII but with an on the // fly translation to ASCII // antlr3EBCDICSetupStream(input); break; case ANTLR3_ENC_8BIT: default: // Standard 8bit/ASCII // antlr38BitSetupStream(input); break; } #endif /* 0 */ }