Skip to content
Snippets Groups Projects
Commit cbaefa24 authored by Alexandre Savard's avatar Alexandre Savard
Browse files

[#3648]

parent 862b455e
Branches
Tags
No related merge requests found
...@@ -29,10 +29,12 @@ ...@@ -29,10 +29,12 @@
*/ */
#include "yamlemitter.h" #include "yamlemitter.h"
#include <stdio.h>
#include "../global.h"
namespace Conf { namespace Conf {
YamlEmitter::YamlEmitter() YamlEmitter::YamlEmitter(const char *file) : filename(file)
{ {
open(); open();
} }
...@@ -50,7 +52,7 @@ void YamlEmitter::open() ...@@ -50,7 +52,7 @@ void YamlEmitter::open()
throw YamlEmitterException("Could not open file descriptor"); throw YamlEmitterException("Could not open file descriptor");
if(!yaml_emitter_initialize(&emitter)) if(!yaml_emitter_initialize(&emitter))
throw YamlEmitterException("Could not open file descriptor"); throw YamlEmitterException("Could not initialize emitter");
// Use unicode format // Use unicode format
yaml_emitter_set_unicode(&emitter, 1); yaml_emitter_set_unicode(&emitter, 1);
...@@ -62,19 +64,88 @@ void YamlEmitter::open() ...@@ -62,19 +64,88 @@ void YamlEmitter::open()
void YamlEmitter::close() void YamlEmitter::close()
{ {
yaml_emitter_delete(&emitter); // yaml_emitter_delete(&emitter);
if(!fd) if(!fd)
throw YamlEmitterException("File descriptor not valid"); throw YamlEmitterException("File descriptor not valid");
fclose(fd);
/*
if(!fclose(fd)) if(!fclose(fd))
throw YamlEmitterException("Error closing file descriptor"); throw YamlEmitterException("Error closing file descriptor");
*/
yaml_document_delete(&document); yaml_document_delete(&document);
} }
void YamlEmitter::read() {} void YamlEmitter::read() {}
void YamlEmitter::write() {} void YamlEmitter::write()
{
serializeData();
for(int i = 0; i < eventNumber; i++) {
if(!yaml_emitter_emit(&emitter, &(events[i])))
throw YamlEmitterException("Falied to emit event");
yaml_emitter_flush(&emitter);
}
}
void YamlEmitter::serializeData()
{
unsigned char sclr[20];
snprintf((char *)sclr, 20, "%s", "value");
yaml_char_t *value = (yaml_char_t *)sclr;
// yaml_document_add_scalar(&document, NULL, value, -1, YAML_PLAIN_SCALAR_STYLE);
// yaml_emitter_dump(&emitter, &document);
eventNumber = 0;
yaml_event_t event;
yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING);
events[eventNumber++] = event;
yaml_document_start_event_initialize(&event, NULL, NULL, NULL, 0);
events[eventNumber++] = event;
yaml_document_end_event_initialize(&event, 0);
events[eventNumber++] = event;
// yaml_scalar_event_initialize(event, yaml_char_t *anchor, yaml_char_t *tag, yaml_char_t *value, int length, int plain_implicit, int quoted_implicit, yaml_scalar_style_t style)
yaml_scalar_event_initialize(&event, NULL, NULL, value, 5, 0, 0, YAML_PLAIN_SCALAR_STYLE);
events[eventNumber++] = event;
// yaml_sequence_start_event_initialize
// yaml_sequence_end_event_initialize
// yaml_mapping_start_event_initialize
// yaml_mapping_end_event_initialize
// yaml_event_delete
yaml_stream_end_event_initialize(&event);
events[eventNumber++] = event;
}
void YamlEmitter::writeDocument()
{
unsigned char sclr[20];
snprintf((char *)sclr, 20, "%s", "value");
yaml_char_t *value = (yaml_char_t *)sclr;
yaml_document_add_scalar(&document, NULL, value, -1, YAML_PLAIN_SCALAR_STYLE);
yaml_emitter_dump(&emitter, &document);
}
} }
...@@ -62,7 +62,7 @@ class YamlEmitter { ...@@ -62,7 +62,7 @@ class YamlEmitter {
public: public:
YamlEmitter(); YamlEmitter(const char *file);
~YamlEmitter(); ~YamlEmitter();
...@@ -74,9 +74,12 @@ class YamlEmitter { ...@@ -74,9 +74,12 @@ class YamlEmitter {
void write(); void write();
void writeDocument();
private: private:
void serializeData();
std::string filename; std::string filename;
FILE *fd; FILE *fd;
...@@ -98,7 +101,7 @@ class YamlEmitter { ...@@ -98,7 +101,7 @@ class YamlEmitter {
yaml_document_t document; yaml_document_t document;
int eventNumber;
}; };
......
...@@ -71,8 +71,10 @@ void YamlParser::close() ...@@ -71,8 +71,10 @@ void YamlParser::close()
if(!fd) if(!fd)
throw YamlParserException("File descriptor not valid"); throw YamlParserException("File descriptor not valid");
if(!fclose(fd)) fclose(fd);
throw YamlParserException("Error closing file descriptor"); // if(!fclose(fd))
// throw YamlParserException("Error closing file descriptor");
} }
......
...@@ -178,10 +178,13 @@ void ConfigurationTest::testYamlParser() ...@@ -178,10 +178,13 @@ void ConfigurationTest::testYamlParser()
void ConfigurationTest::testYamlEmitter() void ConfigurationTest::testYamlEmitter()
{ {
Conf::YamlParser *emitter; Conf::YamlEmitter *emitter;
try{ try{
emitter = new Conf::YamlParser("sequenceEmiter.yml"); emitter = new Conf::YamlEmitter("/tmp/sequenceEmiter.txt");
emitter->writeDocument();
delete emitter; delete emitter;
} }
......
...@@ -65,7 +65,7 @@ CPPUNIT_TEST_SUITE( ConfigurationTest ); ...@@ -65,7 +65,7 @@ CPPUNIT_TEST_SUITE( ConfigurationTest );
// CPPUNIT_TEST( testDefaultValuePreferences ); // CPPUNIT_TEST( testDefaultValuePreferences );
// CPPUNIT_TEST( testDefaultValueSignalisation ); // CPPUNIT_TEST( testDefaultValueSignalisation );
// CPPUNIT_TEST( testInitAudioDriver ); // CPPUNIT_TEST( testInitAudioDriver );
CPPUNIT_TEST( testYamlParser ); // CPPUNIT_TEST( testYamlParser );
CPPUNIT_TEST( testYamlEmitter ); CPPUNIT_TEST( testYamlEmitter );
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
...@@ -100,8 +100,6 @@ public: ...@@ -100,8 +100,6 @@ public:
void testYamlParser(); void testYamlParser();
void testYamlEmitter(); void testYamlEmitter();
}; };
/* Register our test module */ /* Register our test module */
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest"); CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment