.. _program_listing_file_src_translator_batcher.h:

Program Listing for File batcher.h
==================================

|exhale_lsh| :ref:`Return to documentation for file <file_src_translator_batcher.h>` (``src/translator/batcher.h``)

.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS

.. code-block:: cpp

   #ifndef SRC_BERGAMOT_BATCHER_H_
   #define SRC_BERGAMOT_BATCHER_H_
   
   #include <set>
   #include <vector>
   
   #include "batch.h"
   #include "common/options.h"
   #include "data/corpus_base.h"
   #include "definitions.h"
   #include "request.h"
   
   namespace marian {
   namespace bergamot {
   class Batcher {
    public:
     explicit Batcher(Ptr<Options> options);
   
     // RequestSentence incorporates (tentative) notions of priority with each
     // sentence. This method inserts the sentence into the internal data-structure
     // which maintains priority among sentences from multiple concurrent requests.
     void addSentenceWithPriority(RequestSentence &sentence);
     void addWholeRequest(Ptr<Request> request);
   
     // indicate no more sentences will be added.  Does nothing here, for parity to threadsafe version.
     void shutdown() {}
   
     bool operator>>(Batch &batch) { return cleaveBatch(batch); }
   
    private:
     // Loads sentences with sentences compiled from (tentatively) multiple
     // requests optimizing for both padding and priority.
     bool cleaveBatch(Batch &batch);
     size_t miniBatchWords;
     std::vector<std::set<RequestSentence>> bucket_;
     size_t batchNumber_{0};
   };
   
   }  // namespace bergamot
   }  // namespace marian
   
   #endif  // SRC_BERGAMOT_BATCHER_H_