text: 
  #pragma once
  
  #include <vector>
  #include "GlyphBox.h"
  #include "Workload.h"
  #include "AtlasGenerator.h"
  
  namespace msdf_atlas {
  
  /**
   * An implementation of AtlasGenerator that uses the specified generator function
   * and AtlasStorage class and generates glyph bitmaps immediately
   * (does not return until all submitted work is finished),
   * but may use multiple threads (setThreadCount).
   */
  template <typename T, int N, GeneratorFunction<T, N> GEN_FN, class AtlasStorage>
  class ImmediateAtlasGenerator {
  
  public:
      ImmediateAtlasGenerator();
      ImmediateAtlasGenerator(int width, int height);
      void generate(const GlyphGeometry *glyphs, int count);
      void rearrange(int width, int height, const Remap *remapping, int count);
      void resize(int width, int height);
      /// Sets attributes for the generator function
      void setAttributes(const GeneratorAttributes &attributes);
      /// Sets the number of threads to be run by generate
      void setThreadCount(int threadCount);
      /// Allows access to the underlying AtlasStorage
      const AtlasStorage & atlasStorage() const;
      /// Returns the layout of the contained glyphs as a list of GlyphBoxes
      const std::vector<GlyphBox> & getLayout() const;
  
  private:
      AtlasStorage storage;
      std::vector<GlyphBox> layout;
      std::vector<T> glyphBuffer;
      std::vector<byte> errorCorrectionBuffer;
      GeneratorAttributes attributes;
      int threadCount;
  
  };
  
  }
  
  #include "ImmediateAtlasGenerator.hpp"
  