3 #ifndef __ARC_DATAEXTERNALCOMM_H__     4 #define __ARC_DATAEXTERNALCOMM_H__     8 #include <arc/data/FileInfo.h>     9 #include <arc/data/DataStatus.h>    10 #include <arc/UserConfig.h>    17     static char const ErrorTag;
    18     static char const DataStatusTag;
    19     static char const FileInfoTag;
    20     static char const DataChunkTag;
    21     static char const TransferStatusTag;
    23     template<
typename T> 
static bool InEntry(std::istream& instream, T& entry) {
    27       } 
catch(std::exception 
const&) {
    32     template<
typename T> 
static void OutEntry(
Arc::Run& run, 
int timeout, T& entry) {
    33       std::ostringstream ostream;
    35       std::string entry_str((std::ostringstream()<<entry).str());
    36       run.
WriteStdin(-1, entry_str.c_str(), entry_str.length());
    39     static char InTag(std::istream& instream);
    40     static char InTag(
Arc::Run& run, 
int timeout);
    41     static bool OutTag(
Arc::Run& run, 
int timeout, 
char tag);
    43     static bool OutEntry(std::ostream& outstream, 
Arc::FileInfo const& info);
    48       TransferStatus(
unsigned long long int count) : bytes_count(count) {};
    49       unsigned long long int bytes_count;
    51     static bool OutEntry(std::ostream& outstream, 
TransferStatus const& info);
    54     static bool OutEntry(std::ostream& outstream, 
Arc::DataStatus const& status);
    63       bool complete()
 const { 
return (size_left == 0); }
    64       bool write(
Arc::Run& run, 
int timeout, 
void const* data, 
unsigned long long int offset, 
unsigned long long int size) 
const;
    65       bool read(
Arc::Run& run, 
int timeout, 
void* data, 
unsigned long long int& offset, 
unsigned long long int& size);
    69       unsigned long long int offset_left;
    70       unsigned long long int size_left;
    78       DataChunkClient(
void* data, 
unsigned long long int offset, 
unsigned long long int size);
    86       bool write(std::ostream& outstream) 
const;
    87       bool read(std::istream& instream);
    88       bool getEOF()
 const { 
return eof; }
    89       void* 
get() 
const { 
return data; }
    90       void* release() { data_allocated = 
false; 
return data; }
    91       unsigned long long int getOffset()
 const { 
return offset; }
    92       unsigned long long int getSize()
 const { 
return size; }
    96       unsigned long long int offset;
    97       unsigned long long int size;
   104       typedef std::list<DataChunkClient*>::iterator chunk_iterator;
   107         for(chunk_iterator it = chunk_list.begin(); it != chunk_list.end(); ++it) 
delete *it;
   111         iterator(chunk_iterator 
const& other):chunk_iterator(other) {};
   112         DataChunkClient& operator*() { 
return *(chunk_iterator::operator*()); };
   117       void erase(
iterator it) { 
delete it.get(); chunk_list.erase(it); };
   119         for(chunk_iterator it = chunk_list.begin(); it != chunk_list.end(); ++it) 
delete *it;
   122       iterator begin() { 
return chunk_list.begin(); };
   123       iterator end() { 
return chunk_list.end(); };
   124       bool empty()
 const { 
return chunk_list.empty(); };
   125       std::size_t size()
 const { 
return chunk_list.size(); };
   126       void push_back(DataChunkClient& source) { chunk_list.push_back(
new DataChunkClient(source)); };
   128       std::list<DataExternalComm::DataChunkClient*> chunk_list;
   131     static bool OutEntry(
Arc::Run& run, 
int timeout, DataChunkExtBuffer 
const& data);
   132     static bool InEntry(
Arc::Run& run, 
int timeout, DataChunkExtBuffer& data);
   133     static bool OutEntry(std::ostream& outstream, DataChunkClient 
const& data);
   134     static bool InEntry(std::istream& instream, DataChunkClient& data);
   140 #endif // __ARC_DATAEXTERNALCOMM_H__ Arc namespace contains all core ARC classes. 
Definition: ArcConfig.h:11
Definition: DataExternalComm.h:73
User configuration class 
Definition: UserConfig.h:196
Definition: DataExternalComm.h:60
Definition: DataExternalComm.h:109
Status code returned by many DataPoint methods. 
Definition: DataStatus.h:54
Definition: DataExternalComm.h:102
Definition: DataExternalComm.h:46
int WriteStdin(int timeout, const char *buf, int size)
Write to stdin pipe of running executable. 
FileInfo stores information about files (metadata). 
Definition: FileInfo.h:25
This class runs an external executable. 
Definition: Run.h:19
Definition: DataExternalComm.h:14