00001 #ifndef SOUTPUT_QBOX_H 00002 #define SOUTPUT_QBOX_H 00003 00004 #include "QBox.h" 00005 #include "SControlQBox.h" 00006 00007 BOREALIS_NAMESPACE_BEGIN; 00008 00014 class SOutputQBox : public SControlQBox { 00015 00016 friend class SOutputBoxState; 00017 00018 protected: 00019 void setupImpl() throw (AuroraException); 00020 void initImpl() throw (AuroraException); 00021 void runImpl(QBoxInvocation&) throw (AuroraException); 00022 00023 // packing and unpacking states 00024 void setPendingBoxState(ptr<AbstractBoxState> packed_box); 00025 ptr<AbstractBoxState> packState(); 00026 void unpackState(ptr<AbstractBoxState> box_state); 00027 00028 private: 00029 00030 void saveTuple(const Tuple& tuple); 00031 00032 ptr<dynbuf> _last_tuple; 00033 bool _wait_for_last_redo; 00034 Timestamp _timestamp_to_wait_for; 00035 //int32 _id_to_wait_for; 00036 //bool _wait_for_punctuation; 00037 00038 AURORA_DECLARE_QBOX(SOutputQBox, "soutput"); 00039 00040 }; 00041 00047 class SOutputBoxState : public AbstractBoxState 00048 { 00049 public: 00050 SOutputBoxState() {} 00051 SOutputBoxState(dynbuf& tuple) 00052 : _tuple(tuple.max_length()) 00053 { 00054 // Make a copy of the buffer 00055 memcpy(_tuple.data(),tuple.data(),tuple.max_length()); 00056 } 00057 ~SOutputBoxState() {} 00058 00059 dynbuf getTuple() { return _tuple; } 00060 NMSTL_SERIAL_SUBCLASS(SOutputBoxState, AbstractBoxState, << _tuple); 00061 00062 private: 00063 dynbuf _tuple; 00064 }; 00065 00066 00067 00068 BOREALIS_NAMESPACE_END; 00069 00070 #endif