diff options
Diffstat (limited to 'cpp/src/qpid/broker/TxAccept.h')
-rw-r--r-- | cpp/src/qpid/broker/TxAccept.h | 82 |
1 files changed, 33 insertions, 49 deletions
diff --git a/cpp/src/qpid/broker/TxAccept.h b/cpp/src/qpid/broker/TxAccept.h index daf192285a..3a8b663039 100644 --- a/cpp/src/qpid/broker/TxAccept.h +++ b/cpp/src/qpid/broker/TxAccept.h @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -21,58 +21,42 @@ #ifndef _TxAccept_ #define _TxAccept_ -#include <algorithm> -#include <functional> -#include <list> #include "qpid/framing/SequenceSet.h" #include "qpid/broker/DeliveryRecord.h" #include "qpid/broker/TxOp.h" +#include <boost/function.hpp> +#include <algorithm> +#include <functional> +#include <list> namespace qpid { - namespace broker { - /** - * Defines the transactional behaviour for accepts received by - * a transactional channel. - */ - class TxAccept : public TxOp { - struct RangeOp - { - AckRange range; - - RangeOp(const AckRange& r); - void prepare(TransactionContext* ctxt); - void commit(); - }; - - struct RangeOps - { - std::vector<RangeOp> ranges; - DeliveryRecords& unacked; - - RangeOps(DeliveryRecords& u); - - void operator()(framing::SequenceNumber start, framing::SequenceNumber end); - void prepare(TransactionContext* ctxt); - void commit(); - }; - - framing::SequenceSet acked; - DeliveryRecords& unacked; - RangeOps ops; - - public: - /** - * @param acked a representation of the accumulation of - * acks received - * @param unacked the record of delivered messages - */ - TxAccept(const framing::SequenceSet& acked, DeliveryRecords& unacked); - virtual bool prepare(TransactionContext* ctxt) throw(); - virtual void commit() throw(); - virtual void rollback() throw(); - virtual ~TxAccept(){} - }; - } +namespace broker { +/** + * Defines the transactional behaviour for accepts received by + * a transactional channel. + */ +class TxAccept : public TxOp { + typedef std::vector<AckRange> AckRanges; + + void each(boost::function<void(DeliveryRecord&)>); + + framing::SequenceSet acked; + DeliveryRecords& unacked; + AckRanges ranges; + + public: + /** + * @param acked a representation of the accumulation of + * acks received + * @param unacked the record of delivered messages + */ + TxAccept(const framing::SequenceSet& acked, DeliveryRecords& unacked); + virtual bool prepare(TransactionContext* ctxt) throw(); + virtual void commit() throw(); + virtual void rollback() throw(); + virtual ~TxAccept(){} +}; +} } |