/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef GUTHTHILA_READER_H #define GUTHTHILA_READER_H #include #include #include EXTERN_C_START() typedef int(GUTHTHILA_CALL * GUTHTHILA_READ_INPUT_CALLBACK)( guththila_char_t *buffer, int size, void *ctx); enum guththila_reader_type { GUTHTHILA_FILE_READER = 1, GUTHTHILA_IO_READER, GUTHTHILA_MEMORY_READER }; typedef struct guththila_reader_s { int type; /* Type of reader */ FILE *fp; /* File pointer */ guththila_char_t *buff; /* Buffer */ int buff_size; /* Buff size */ GUTHTHILA_READ_INPUT_CALLBACK input_read_callback; /* Call back */ void *context; /* Context */ } guththila_reader_t; #ifndef GUTHTHILA_READER_SET_LAST_START #define GUTHTHILA_READER_SET_LAST_START(_reader, _start) ((_reader)->start = _start) #endif #ifndef GUTHTHILA_READER_STEP_BACK #define GUTHTHILA_READER_STEP_BACK(_reader) ((_reader->next--)) #endif /* * Reading a file. * @param filename name of the file * @param env environment */ GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL guththila_reader_create_for_file( guththila_char_t *filename, const axutil_env_t * env); /* * Reading from a call back function. * @param input_read_callback function pointer to read data * @param ctx context * @param env environment */ GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL guththila_reader_create_for_io( GUTHTHILA_READ_INPUT_CALLBACK input_read_callback, void *ctx, const axutil_env_t * env); /* * Reading from memory buffer. * @param buffer buffer * @param size size of the buffer * @param env environment */ GUTHTHILA_EXPORT guththila_reader_t * GUTHTHILA_CALL guththila_reader_create_for_memory( void *buffer, int size, const axutil_env_t * env); /* * Read the specified number of character to the given buffer. * @param r reader * @param buffer buffer to place the read data * @param offset position to place the data on the given buffer * @param length number of bytes to read * @param env environment * @return number of bytes put in to the buffer. -1 if end of the read. */ GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_reader_read( guththila_reader_t * r, guththila_char_t * buffer, int offset, int length, const axutil_env_t * env); /* * Free the reader. * @param r reader * @param env environment */ GUTHTHILA_EXPORT void GUTHTHILA_CALL guththila_reader_free( guththila_reader_t * r, const axutil_env_t * env); EXTERN_C_END() #endif /* */