Skip to content

Commit 3d4d1fd

Browse files
committed
* Fixed issue #23: Create a new interface for abstracting the string literal encoding format
* Created new unit tests: TestCLI.testEncoding(), TestExtraction.testEncodingOct() and TestExtraction.testEncodingHex() * Created new API functions: capitalizeFirstCharacter(), uppercase() and lowercase(). * Created new command line argument: --encoding=<value> to support the desired encoding.
1 parent dec8e73 commit 3d4d1fd

16 files changed

+295
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@
2727
/msvc/TestCLI.testSkipping.actual.txt
2828
/msvc/TestCLI.testUpdating.actual.txt
2929
/msvc/TestCLI.testUpdatingFile.actual.txt
30+
/msvc/TestCLI.testEncoding.actual.txt

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Changes for 2.0:
1212
* Fixed issue #20: Modify how 'override' argument is implemented
1313
* Fixed issue #21: Add a reference to source code location in generated files.
1414
* Fixed issue #22: Modify IGenerator interface to use setters/getters.
15+
* Fixed issue #23: Create a new interface for abstracting the string literal encoding format
1516

1617
Changes for 1.4:
1718

msvc/bin2cpp_unittest.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@
110110
<ClCompile Include="..\test\TestCommon.cpp" />
111111
<ClCompile Include="..\test\TestExtraction.cpp" />
112112
<ClCompile Include="generated_files\testBaseClass\_testBaseClass.cpp" />
113+
<ClCompile Include="generated_files\testEncodingHex\_testEncodingHex.cpp" />
114+
<ClCompile Include="generated_files\testEncodingOct\_testEncodingOct.cpp" />
113115
<ClCompile Include="generated_files\testGeneratorArray10000\_testGeneratorArray10000.cpp" />
114116
<ClCompile Include="generated_files\testGeneratorSegment10000\_testGeneratorSegment10000.cpp" />
115117
<ClCompile Include="generated_files\testGeneratorString10000\_testGeneratorString10000.cpp" />
@@ -153,6 +155,8 @@
153155
<ClInclude Include="..\test\TestCommon.h" />
154156
<ClInclude Include="..\test\TestExtraction.h" />
155157
<ClInclude Include="generated_files\testBaseClass\_testBaseClass.h" />
158+
<ClInclude Include="generated_files\testEncodingHex\_testEncodingHex.h" />
159+
<ClInclude Include="generated_files\testEncodingOct\_testEncodingOct.h" />
156160
<ClInclude Include="generated_files\testGeneratorArray10000\_testGeneratorArray10000.h" />
157161
<ClInclude Include="generated_files\testGeneratorSegment10000\_testGeneratorSegment10000.h" />
158162
<ClInclude Include="generated_files\testGeneratorString10000\_testGeneratorString10000.h" />

msvc/bin2cpp_unittest.vcxproj.filters

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@
108108
<ClCompile Include="generated_files\testNamespace\_testNamespace.cpp">
109109
<Filter>Generated Files</Filter>
110110
</ClCompile>
111+
<ClCompile Include="generated_files\testEncodingHex\_testEncodingHex.cpp">
112+
<Filter>Generated Files</Filter>
113+
</ClCompile>
114+
<ClCompile Include="generated_files\testEncodingOct\_testEncodingOct.cpp">
115+
<Filter>Generated Files</Filter>
116+
</ClCompile>
111117
</ItemGroup>
112118
<ItemGroup>
113119
<None Include="bin2cppTest.x86.debug.xml">
@@ -200,6 +206,12 @@
200206
<ClInclude Include="generated_files\testNamespace\_testNamespace.h">
201207
<Filter>Generated Files</Filter>
202208
</ClInclude>
209+
<ClInclude Include="generated_files\testEncodingHex\_testEncodingHex.h">
210+
<Filter>Generated Files</Filter>
211+
</ClInclude>
212+
<ClInclude Include="generated_files\testEncodingOct\_testEncodingOct.h">
213+
<Filter>Generated Files</Filter>
214+
</ClInclude>
203215
</ItemGroup>
204216
<ItemGroup>
205217
<CustomBuild Include="generate_test_files.bat" />

msvc/generate_test_files.bat

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ mkdir %OUTDIR% 1>NUL 2>NUL
126126
testfilegenerator.exe --file=%OUTDIR%\%TEST_NAME%.bin --size=10000 --fill=sequential
127127
bin2cpp.exe --noheader --file=%OUTDIR%\%TEST_NAME%.bin --output=%OUTDIR% --headerfile=_%TEST_NAME%.h --identifier=%TEST_NAME% --chunksize=450 --generator=segment --override --baseclass=Resource
128128

129+
set TEST_NAME=testEncodingOct
130+
set OUTDIR=.\generated_files\%TEST_NAME%
131+
mkdir %OUTDIR% 1>NUL 2>NUL
132+
testfilegenerator.exe --file=%OUTDIR%\%TEST_NAME%.bin --size=10000 --fill=sequential
133+
bin2cpp.exe --noheader --file=%OUTDIR%\%TEST_NAME%.bin --output=%OUTDIR% --headerfile=_%TEST_NAME%.h --identifier=%TEST_NAME% --chunksize=450 --generator=segment --override --encoding=OcT
134+
135+
set TEST_NAME=testEncodingHex
136+
set OUTDIR=.\generated_files\%TEST_NAME%
137+
mkdir %OUTDIR% 1>NUL 2>NUL
138+
testfilegenerator.exe --file=%OUTDIR%\%TEST_NAME%.bin --size=10000 --fill=sequential
139+
bin2cpp.exe --noheader --file=%OUTDIR%\%TEST_NAME%.bin --output=%OUTDIR% --headerfile=_%TEST_NAME%.h --identifier=%TEST_NAME% --chunksize=450 --generator=segment --override --encoding=HeX
140+
129141
set TEST_NAME=testIssue12
130142
set OUTDIR=.\generated_files\%TEST_NAME%
131143
mkdir %OUTDIR% 1>NUL 2>NUL

src/ArrayGenerator.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ namespace bin2cpp
3030
return false;
3131

3232
//Uppercase function identifier
33-
std::string functionIdentifier = mFunctionIdentifier;
34-
functionIdentifier[0] = (char)toupper(functionIdentifier[0]);
33+
std::string functionIdentifier = capitalizeFirstCharacter(mFunctionIdentifier);
3534

3635
//Build header and cpp file path
3736
std::string headerPath = getHeaderFilePath(iCppFilePath);

src/BaseGenerator.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
namespace bin2cpp
1010
{
11-
BaseGenerator::BaseGenerator()
11+
BaseGenerator::BaseGenerator() :
12+
mCppEncoder(IGenerator::CPP_ENCODER_OCT)
1213
{
1314
}
1415

@@ -70,15 +71,24 @@ namespace bin2cpp
7071
return mBaseClass.c_str();
7172
}
7273

74+
void BaseGenerator::setCppEncoder(const IGenerator::CppEncoderEnum & iCppEncoder)
75+
{
76+
mCppEncoder = iCppEncoder;
77+
}
78+
79+
IGenerator::CppEncoderEnum BaseGenerator::getCppEncoder() const
80+
{
81+
return mCppEncoder;
82+
}
83+
7384
//-------------------------------
7485
//protected methods
7586
//-------------------------------
7687

7788
std::string BaseGenerator::getGetterFunctionName()
7889
{
7990
//Uppercase function identifier
80-
std::string functionIdentifier = mFunctionIdentifier;
81-
functionIdentifier[0] = (char)toupper(functionIdentifier[0]);
91+
std::string functionIdentifier = capitalizeFirstCharacter(mFunctionIdentifier);
8292

8393
std::string getter;
8494
getter.append("get");

src/BaseGenerator.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ namespace bin2cpp
2525
virtual const char * getNamespace() const;
2626
virtual void setBaseClass(const char * iName);
2727
virtual const char * getBaseClass() const;
28+
virtual void setCppEncoder(const CppEncoderEnum & iCppEncoder);
29+
virtual CppEncoderEnum getCppEncoder() const;
2830

2931
//same header file for all generators
3032
virtual bool createCppHeaderFile(const char * iHeaderFilePath);
@@ -42,6 +44,7 @@ namespace bin2cpp
4244
size_t mChunkSize;
4345
std::string mNamespace;
4446
std::string mBaseClass;
47+
IGenerator::CppEncoderEnum mCppEncoder;
4548
};
4649

4750
}; //bin2cpp

src/IGenerator.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,24 @@ namespace bin2cpp
7575
///<returns>Returns the name of the base class of the generated code. Returns an empty string if not defined.</returns>
7676
virtual const char * getBaseClass() const = 0;
7777

78+
enum CppEncoderEnum
79+
{
80+
CPP_ENCODER_OCT,
81+
CPP_ENCODER_HEX,
82+
};
83+
84+
///<summary>
85+
///Defines the type of cpp encoder to use. See CppEncoderEnum for details.
86+
///</summary>
87+
///<param name="iCppEncoder">The type of cpp encoder to use</param>
88+
virtual void setCppEncoder(const CppEncoderEnum & iCppEncoder) = 0;
89+
90+
///<summary>
91+
///Provides the type of cpp encoder to use. See CppEncoderEnum for details.
92+
///</summary>
93+
///<returns>Returns the type of cpp encoder to use.</returns>
94+
virtual CppEncoderEnum getCppEncoder() const = 0;
95+
7896
///<summary>
7997
///Creates a header file for embedding a given file into C++ source code.
8098
///</summary>

src/SegmentGenerator.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ namespace bin2cpp
3030
return false;
3131

3232
//Uppercase function identifier
33-
std::string functionIdentifier = mFunctionIdentifier;
34-
functionIdentifier[0] = (char)toupper(functionIdentifier[0]);
33+
std::string functionIdentifier = capitalizeFirstCharacter(mFunctionIdentifier);
3534

3635
//Build header and cpp file path
3736
std::string headerPath = getHeaderFilePath(iCppFilePath);
@@ -93,8 +92,21 @@ namespace bin2cpp
9392
if (readSize == 0)
9493
continue; //nothing to output if nothing was read
9594

95+
//convert to cpp string
96+
std::string cppEncoder;
97+
switch(mCppEncoder)
98+
{
99+
case IGenerator::CPP_ENCODER_HEX:
100+
cppEncoder = cppencoder::toHexString(buffer, readSize);
101+
break;
102+
case IGenerator::CPP_ENCODER_OCT:
103+
default:
104+
cppEncoder = cppencoder::toOctString(buffer, readSize, false);
105+
break;
106+
};
107+
96108
//output
97-
fprintf(cpp, " mBuffer.append(\"%s\", %d);\n", cppencoder::toOctString(buffer, readSize, false).c_str(), readSize);
109+
fprintf(cpp, " mBuffer.append(\"%s\", %d);\n", cppEncoder.c_str(), readSize);
98110
}
99111
delete[] buffer;
100112
buffer = NULL;

0 commit comments

Comments
 (0)