GridLab
Grid Application Toolkit

A simple API for Grid Applications
GAT

Menu



Main Page   Alphabetical List   Compound List   File List   Compound Members   File Members  

GATFileStreamCPI.h

Go to the documentation of this file.
00001 /** @file GATFileStreamCPI.h
00002  * Header for the GATFileStreamCPI class.
00003  * 
00004  * A GATFileStreamCPI encapsulates all the methods that a GATFileStream capability
00005  * provider provides.
00006  * 
00007  * @date $Date: 2004/04/01 17:21:28 $
00008  * 
00009  * @version $Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/src/GATFileStreamCPI.h,v 1.6 2004/04/01 17:21:28 hartmutkaiser Exp $
00010  *
00011  *  Copyright (C) Kelly Davis
00012  *  This is part of the GAT Engine.
00013  *  Contributed by Kelly Davis <kdavis@aei.mpg.de>.
00014  *
00015  *  Use, modification and distribution is subject to the Gridlab Software
00016  *  License. (See accompanying file GLlicense.txt or copy at
00017  *  http://www.gridlab.org/GLlicense.txt)
00018  */
00019 
00020 #ifndef _GATFILESTREAMCPI_H_
00021 #define _GATFILESTREAMCPI_H_ 1
00022 
00023 typedef struct GATFileStreamCPI_S *GATFileStreamCPI;
00024 
00025 #include "GATType.h"
00026 #include "GATContext.h"
00027 #include "GATPreferences.h"
00028 #include "GATLocation.h"
00029 #include "GATMetricEvent.h"
00030 #include "GATMetric.h"
00031 #include "GATTime.h"
00032 #include "GATFileStream.h"
00033 #include "GATMonitorable.h"
00034 
00035 /* Versioning constants for the GATFileStreamCPI_Data struct */
00036 #define GATFILESTREAMCPI_VERSION1 1 
00037 
00038 /* the newest version we know of */
00039 #define GATFILESTREAMCPI_VERSION  GATFILESTREAMCPI_VERSION1
00040 
00041 /**
00042  *  The @c #GATFileStreamCPI_Instance structure holds all data items supplied by the 
00043  *  client during the construction of the GATFileStream object.
00044  */
00045 typedef struct 
00046 {
00047   GATContext context;   /* the GAT context to use for all GATFileStream operations */
00048   GATLocation location; /* the location of the fileStream */
00049   GATFileStreamMode mode; /* the mode in which to open the fileStream */
00050   GATMonitorable_Impl monitorable;  /* monitoring support */
00051   GATObject_const source;   /* the object this CPI is associated with */
00052   void *instance_data;  /* eventually supplied CPI provider instance data */
00053 } GATFileStreamCPI_Instance;
00054 
00055 /* prototypes for the adapter callback functions */
00056 typedef void (*GATFileStreamCPI_Adaptor_Destroy)(void *);
00057 
00058 typedef GATResult (*GATFileStreamCPI_Adaptor_ServiceActions)(void *, 
00059   GATFileStreamCPI_Instance *, GATTimePeriod_const);
00060 
00061 /* instance specific functions */
00062 typedef void (*GATFileStreamCPI_Adaptor_DestroyInstance)(void *, 
00063   GATFileStreamCPI_Instance *);
00064 
00065 typedef GATResult (*GATFileStreamCPI_Adaptor_CreateInstance)(void *, 
00066   GATFileStreamCPI_Instance *);
00067 
00068 typedef GATResult (*GATFileStreamCPI_Adaptor_CloneInstance)(void *, 
00069   GATFileStreamCPI_Instance const *, GATFileStreamCPI_Instance *);
00070 
00071 typedef GATResult (*GATFileStreamCPI_Adaptor_EqualsInstance)(void *, 
00072   GATFileStreamCPI_Instance const *, GATFileStreamCPI_Instance const *, GATBool *);
00073 
00074 
00075 /* CPI specific API */
00076 typedef GATResult (*GATFileStreamCPI_Adaptor_Read)(void *, 
00077   GATFileStreamCPI_Instance const *, void *, GATuint32, GATuint32 *);
00078   
00079 typedef GATResult (*GATFileStreamCPI_Adaptor_Write)(void *, 
00080   GATFileStreamCPI_Instance const *, void const *, GATuint32, GATuint32 *);
00081   
00082 typedef GATResult (*GATFileStreamCPI_Adaptor_Seek)(void *, 
00083   GATFileStreamCPI_Instance const *, GATOrigin, GATint32, GATuint32 *);
00084 
00085 typedef GATResult (*GATFileStreamCPI_Adaptor_Close)(void *, 
00086   GATFileStreamCPI_Instance *);
00087   
00088 
00089 /* callback function prototypes for the GATMonitorable interface support */
00090 typedef GATResult (* GATFileStreamCPI_Adaptor_GetMetrics)(void *, 
00091   GATFileStreamCPI_Instance const *, GATList_GATMetric *);
00092 
00093 typedef GATResult (* GATFileStreamCPI_Adaptor_GetMetricEvent)(void *, 
00094   GATFileStreamCPI_Instance const *, GATMetric, GATMetricEvent *); 
00095   
00096 typedef struct
00097 {
00098   /* CPI data (type local data) */
00099   void *data;
00100   GATFileStreamCPI_Adaptor_Destroy destroy;
00101   GATFileStreamCPI_Adaptor_ServiceActions service_actions;
00102   
00103   /* CPI instance data */
00104   GATFileStreamCPI_Adaptor_CreateInstance create_instance;
00105   GATFileStreamCPI_Adaptor_DestroyInstance destroy_instance;
00106   GATFileStreamCPI_Adaptor_CloneInstance clone_instance;
00107   GATFileStreamCPI_Adaptor_EqualsInstance equals_instance;
00108   
00109   /* CPI functionality */
00110   GATFileStreamCPI_Adaptor_Read read;
00111   GATFileStreamCPI_Adaptor_Write write;
00112   GATFileStreamCPI_Adaptor_Seek seek;
00113   GATFileStreamCPI_Adaptor_Close close;
00114   
00115   /* CPI monitoring support */
00116   GATFileStreamCPI_Adaptor_GetMetrics get_metrics;
00117   GATFileStreamCPI_Adaptor_GetMetricEvent get_metric_event;
00118 } GATFileStreamCPI_Data;
00119 
00120 #ifdef __cplusplus
00121 extern "C" {
00122 #endif
00123 
00124 /* Adaptor API */
00125 GATFileStreamCPI 
00126   GATFileStreamCPI_Create(unsigned long int version, 
00127     GATFileStreamCPI_Data *data);
00128 
00129 /* API internal to the GAT engine */
00130 void 
00131   GATFileStreamCPI_Destroy(GATFileStreamCPI *cpi);
00132 
00133 /* CPI instance specific functions */
00134 GATResult 
00135   GATFileStreamCPI_CreateInstance(GATFileStreamCPI cpi, 
00136     GATFileStreamCPI_Instance *instance_data);
00137   
00138 void 
00139   GATFileStreamCPI_DestroyInstance(GATFileStreamCPI cpi, 
00140     GATFileStreamCPI_Instance *instance_data);
00141 
00142 GATResult 
00143   GATFileStreamCPI_CloneInstance(GATFileStreamCPI cpi, 
00144     GATFileStreamCPI_Instance const *instance_data, 
00145     GATFileStreamCPI_Instance *new_instance_data);
00146 
00147 GATResult 
00148   GATFileStreamCPI_EqualsInstance(GATFileStreamCPI cpi, 
00149     GATFileStreamCPI_Instance const *lhs, GATFileStreamCPI_Instance const *rhs, 
00150     GATBool *isequal);
00151 
00152 /* CPI specific API functions */
00153 GATResult 
00154   GATFileStreamCPI_Read(GATFileStreamCPI cpi, 
00155     GATFileStreamCPI_Instance const *data, void *buffer, GATuint32 size, 
00156     GATuint32 *read_bytes);
00157   
00158 GATResult 
00159   GATFileStreamCPI_Write(GATFileStreamCPI cpi, 
00160     GATFileStreamCPI_Instance const *data, void const *buffer, GATuint32 size, 
00161     GATuint32 *written_bytes);
00162   
00163 GATResult 
00164   GATFileStreamCPI_Seek(GATFileStreamCPI cpi, 
00165     GATFileStreamCPI_Instance const *data, GATOrigin origin, GATint32 offset, 
00166     GATuint32 *new_position);
00167 
00168 GATResult 
00169   GATFileStreamCPI_Close(GATFileStreamCPI cpi, 
00170     GATFileStreamCPI_Instance *data );
00171 
00172 /* GATMonitorable */
00173 GATResult 
00174   GATFileStreamCPI_GetMetrics(GATFileStreamCPI cpi, 
00175     GATFileStreamCPI_Instance const *data, GATList_GATMetric *metrics);
00176   
00177 GATResult 
00178   GATFileStreamCPI_GetMetricEvent(GATFileStreamCPI cpi, 
00179     GATFileStreamCPI_Instance const *data, GATMetric metric, 
00180     GATMetricEvent *event);
00181 
00182 #ifdef __cplusplus
00183 }
00184 #endif
00185 
00186 #endif /* _GATFILESTREAMCPI_H_ */