| 
									
										
										
										
											2006-06-04 19:02:07 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | Copyright (C) 2004,2005,2006 (Nuno A. Fonseca) <nuno.fonseca@gmail.com> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This program is free software; you can redistribute it and/or  | 
					
						
							|  |  |  | modify it under the terms of the GNU General Public License  | 
					
						
							|  |  |  | as published by the Free Software Foundation; either  | 
					
						
							|  |  |  | version 2 of the License, or (at your option) any later  | 
					
						
							|  |  |  | version. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | GNU General Public License for more details. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-04 19:02:07 +00:00
										 |  |  | Last rev: $Id: prologterms2c.h,v 1.2 2006-06-04 19:02:07 nunofonseca Exp $ | 
					
						
							|  |  |  | Comments: This file provides a set of functions to convert a prolog term to a C string and back. | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | #ifndef PROLOGTERMS2C
 | 
					
						
							|  |  |  | #define PROLOGTERMS2C 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _yap_c_interface_h
 | 
					
						
							|  |  |  | #include <YapInterface.h>
 | 
					
						
							|  |  |  | //#include <yap_structs.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef size_t
 | 
					
						
							|  |  |  | #include <unistd.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #include <stdarg.h>
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Converts a term t into a string.   | 
					
						
							| 
									
										
										
										
											2012-02-02 23:25:31 +00:00
										 |  |  |  * An internal representation of t is | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  |  * copied to ptr if it occupies less than size. Otherwise the | 
					
						
							|  |  |  |  * necessary memory is aloccated (dyn_ptr) and the ascii | 
					
						
							|  |  |  |  * representation of the term is copied to there. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | char* term2string(char *const ptr,size_t *size, const YAP_Term t); | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Converts a string with a ascci representation of a term into a term. | 
					
						
							|  |  |  |  * The ascii representation of t is | 
					
						
							|  |  |  |  * copied to ptr if it occupies less than *size. Otherwise the | 
					
						
							|  |  |  |  * necessary memory is aloccated  and the ascii | 
					
						
							|  |  |  |  * representation of the term is copied to there. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | YAP_Term string2term(char *const ptr,const size_t *size); | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Read a prolog term from a stream | 
					
						
							|  |  |  |  * (the prolog term must have been writen by the write_term_to_stream) | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | YAP_Term read_term_from_stream(const int fd); | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Writes a term to a stream. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | size_t write_term_to_stream(const int fd,const YAP_Term term); | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Changes the size of the buffer to contain at least newsize bytes. | 
					
						
							|  |  |  |  * Useful to reduce the number of reallocs,mallocs, and frees | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void change_buffer_size(const size_t newsize); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void write_msg(const char *fun,const char *file, int line,const char *format, ...); | 
					
						
							|  |  |  | /*********************************************************************************************
 | 
					
						
							|  |  |  |  * Macros to manipulate the buffer | 
					
						
							|  |  |  |  *********************************************************************************************/ | 
					
						
							| 
									
										
										
										
											2012-02-05 11:20:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 01:50:59 +00:00
										 |  |  | extern size_t BLOCK_SIZE; | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-24 19:59:42 +00:00
										 |  |  | #define buffer (buffers[YAP_ThreadSelf()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | // deletes the buffer (all fields) but does not release the memory of the buffer.ptr
 | 
					
						
							| 
									
										
										
										
											2015-02-11 01:50:59 +00:00
										 |  |  | #define DEL_BUFFER()   {buffer.ptr=NULL;buffer.size=0;buffer.len=0;buffer.pos=0;}
 | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | //  informs the prologterm2c module that the buffer is now used and should not be messed
 | 
					
						
							| 
									
										
										
										
											2015-02-11 01:50:59 +00:00
										 |  |  | #define USED_BUFFER()  DEL_BUFFER()
 | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | // initialize buffer
 | 
					
						
							| 
									
										
										
										
											2015-02-11 01:50:59 +00:00
										 |  |  | #define RESET_BUFFER() \
 | 
					
						
							|  |  |  | {buffer.len=0;change_buffer_size(BLOCK_SIZE);buffer.pos=0;} | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | #define BUFFER_PTR   buffer.ptr
 | 
					
						
							|  |  |  | #define BUFFER_SIZE  buffer.size
 | 
					
						
							|  |  |  | #define BUFFER_LEN   buffer.len
 | 
					
						
							|  |  |  | #define BUFFER_POS   buffer.pos
 | 
					
						
							|  |  |  | // copies two buffers
 | 
					
						
							|  |  |  | #define COPY_BUFFER_DS(src,dst) {dst.size=src.size;dst.len=src.len;dst.ptr=src.ptr;dst.pos=src.pos;}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************************************
 | 
					
						
							|  |  |  |  * Buffer | 
					
						
							|  |  |  |  *********************************************************************************************/ | 
					
						
							|  |  |  | struct buffer_ds { | 
					
						
							|  |  |  |   size_t size,  // size of the buffer
 | 
					
						
							|  |  |  |          len;   // size of the string
 | 
					
						
							|  |  |  |   char *ptr;    // pointer to the buffer
 | 
					
						
							|  |  |  |   size_t pos;    // position (used while reading)
 | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-01-24 19:59:42 +00:00
										 |  |  | extern struct buffer_ds buffers[1024]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-02 04:16:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif
 |