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