TemplateStream.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * TemplateStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "DataSourceStream.h"
14 #include "WHashMap.h"
15 #include "WString.h"
16 
17 #define TEMPLATE_MAX_VAR_NAME_LEN 16
18 
22 class TemplateVariables : public HashMap<String, String>
23 {
24 };
25 
35 };
43 {
44 public:
48  TemplateStream(IDataSourceStream* stream) : stream(stream)
49  {
50  // Pre-allocate string to maximum length
51  varName.reserve(TEMPLATE_MAX_VAR_NAME_LEN);
52  }
53 
55  {
56  delete stream;
57  }
58 
59  //Use base class documentation
60  StreamType getStreamType() const override
61  {
62  return stream ? eSST_Template : eSST_Invalid;
63  }
64 
65  //Use base class documentation
66  uint16_t readMemoryBlock(char* data, int bufSize) override;
67 
68  //Use base class documentation
69  bool seek(int len) override;
70 
71  bool isFinished() override
72  {
73  return stream ? stream->isFinished() : true;
74  }
75 
81  void setVar(const String& name, const String& value)
82  {
83  templateData[name] = value;
84  }
85 
89  void setVars(const TemplateVariables& vars)
90  {
91  templateData.setMultiple(vars);
92  }
93 
98  {
99  return templateData;
100  }
101 
102  String getName() const override
103  {
104  return stream ? stream->getName() : nullptr;
105  }
106 
116 private:
117  IDataSourceStream* stream = nullptr;
118  TemplateVariables templateData;
120  String varName;
121  size_t skipBlockSize = 0;
122  size_t varDataPos = 0;
123  size_t varWaitSize = 0;
124 };
125 
Template expand state sending variable.
Definition: TemplateStream.h:34
Template expand state found.
Definition: TemplateStream.h:32
HashMap class template.
Definition: WHashMap.h:37
StreamType getStreamType() const override
Get the stream type.
Definition: TemplateStream.h:60
Base class for data source stream.
Definition: DataSourceStream.h:39
~TemplateStream()
Definition: TemplateStream.h:54
String getName() const override
Returns name of the resource.
Definition: TemplateStream.h:102
Template expand state start variable.
Definition: TemplateStream.h:33
bool isFinished() override
Check if all data has been read.
Definition: TemplateStream.h:71
The String class.
Definition: WString.h:136
Template expand state wait.
Definition: TemplateStream.h:31
TemplateStream(IDataSourceStream *stream)
Create a template stream.
Definition: TemplateStream.h:48
#define TEMPLATE_MAX_VAR_NAME_LEN
Definition: TemplateStream.h:17
Definition: TemplateStream.h:42
TemplateExpandState
Template file stream expand state.
Definition: TemplateStream.h:30
TemplateVariables & variables()
Get the template variables.
Definition: TemplateStream.h:97
StreamType
Data stream type.
Definition: DataSourceStream.h:22
Template data stream.
Definition: DataSourceStream.h:26
Template variable (hash map) class.
Definition: TemplateStream.h:22
Stream content not valid.
Definition: DataSourceStream.h:23
void setVars(const TemplateVariables &vars)
Set multiple variables in the template file.
Definition: TemplateStream.h:89
void setVar(const String &name, const String &value)
Set value of a variable in the template file.
Definition: TemplateStream.h:81