[DEV] add raw stream

This commit is contained in:
Edouard DUPIN 2016-12-02 23:36:19 +01:00
parent 9e2a9ed301
commit aeb151e525
8 changed files with 116 additions and 32 deletions

View File

@ -35,7 +35,7 @@ list_of_known_type = [
["file", "zeus::File"],
["stream", "zeus::Stream"],
["json", "ejson::Object"],
["buffer", "zeus::Buffer"],
["raw", "zeus::Raw"],
]
@ -78,7 +78,7 @@ class AttributeDefinition:
def set_brief(self, desc):
self.name = "";
self.brief = remove_start_stop_spacer(desc);
self.brief = remove_start_stop_spacer(desc).replace("\"", "\\\"")
self.type = "";
def set_type(self, type):
@ -123,7 +123,7 @@ class FunctionDefinition:
def set_brief(self, desc):
self.name = "";
self.brief = remove_start_stop_spacer(desc);
self.brief = remove_start_stop_spacer(desc).replace("\"", "\\\"")
self.return_type = "";
self.return_brief = "";
self.parameters = []
@ -132,8 +132,8 @@ class FunctionDefinition:
for elem in self.parameters:
if elem["name"] == "" \
and elem["brief"] == "":
elem["name"] = remove_start_stop_spacer(name);
elem["brief"] = remove_start_stop_spacer(desc);
elem["name"] = remove_start_stop_spacer(name)
elem["brief"] = remove_start_stop_spacer(desc).replace("\"", "\\\"")
return;
self.parameters.append({
"type":"",
@ -142,15 +142,15 @@ class FunctionDefinition:
})
def set_return_comment(self, desc):
self.return_brief = remove_start_stop_spacer(desc);
self.return_brief = remove_start_stop_spacer(desc)
def set_return_type(self, type):
self.return_type = remove_start_stop_spacer(type);
self.return_type = remove_start_stop_spacer(type)
def add_parameter_type(self, type):
for elem in self.parameters:
if elem["type"] == "":
elem["type"] = remove_start_stop_spacer(type);
elem["type"] = remove_start_stop_spacer(type)
return;
self.parameters.append({
"type":remove_start_stop_spacer(type),
@ -273,7 +273,7 @@ class ServiceDefinition:
self.name[-1] = capital_first(self.name[-1])
def set_brief(self, value):
self.brief = remove_start_stop_spacer(value)
self.brief = remove_start_stop_spacer(value).replace("\"", "\\\"")
def set_version(self, value):
self.version = remove_start_stop_spacer(value)
@ -282,7 +282,7 @@ class ServiceDefinition:
self.api = remove_start_stop_spacer(value)
def add_author(self, value):
self.authors.append(remove_start_stop_spacer(value))
self.authors.append(remove_start_stop_spacer(value).replace("\"", "\\\""))
def add_function(self, value):
# TODO : Check if function already exist
@ -319,6 +319,7 @@ class ServiceDefinition:
out += "\n"
out += "#include <etk/types.hpp>\n"
out += "#include <eproperty/Value.hpp>\n"
out += "#include <zeus/Raw.hpp>\n"
out += "#include <string>\n"
out += "#include <vector>\n"
out += "\n"

View File

@ -42,6 +42,7 @@ def configure(target, my_module):
'zeus/AbstractFunction.cpp',
'zeus/FutureBase.cpp',
'zeus/Future.cpp',
'zeus/Raw.cpp',
'zeus/Buffer.cpp',
'zeus/BufferParameter.cpp',
'zeus/BufferCall.cpp',
@ -71,6 +72,7 @@ def configure(target, my_module):
'zeus/FutureData.hpp',
'zeus/FutureBase.hpp',
'zeus/Future.hpp',
'zeus/Raw.hpp',
'zeus/Buffer.hpp',
'zeus/BufferParameter.hpp',
'zeus/BufferCall.hpp',

View File

@ -10,6 +10,7 @@
#include <etk/stdTools.hpp>
#include <zeus/AbstractFunction.hpp>
#include <zeus/ObjectRemote.hpp>
#include <zeus/Raw.hpp>
#include <climits>
namespace zeus {
template<>
@ -1472,6 +1473,21 @@ namespace zeus {
}
*/
template<>
zeus::Raw BufferParameter::getParameter<zeus::Raw>(int32_t _id) const {
zeus::ParamType type = getParameterType(_id);
const uint8_t* pointer = getParameterPointer(_id);
uint32_t dataSize = getParameterSize(_id);
// TODO : Check size ...
if (createType<zeus::Raw>() == type) {
// get size if the file in int32_t
uint32_t size = 0;
memcpy(&size, pointer, sizeof(uint32_t));
return zeus::Raw(size, &pointer[sizeof(uint32_t)]);
}
ZEUS_ERROR("Can not get type from '" << type << "'");
return zeus::Raw();
}
template<>
ememory::SharedPtr<zeus::ObjectRemoteBase> BufferParameter::getParameter<ememory::SharedPtr<zeus::ObjectRemoteBase>>(const ememory::SharedPtr<zeus::WebServer>& _iface, int32_t _id) const {
ememory::SharedPtr<zeus::ObjectRemoteBase> out;
zeus::ParamType type = getParameterType(_id);

View File

@ -7,7 +7,7 @@
#include <zeus/BufferAnswer.hpp>
#include <zeus/debug.hpp>
#include <zeus/File.hpp>
#include <zeus/Raw.hpp>
#include <zeus/ObjectRemote.hpp>
namespace zeus {
@ -324,18 +324,16 @@ namespace zeus {
return out;
}
template<>
zeus::File zeus::Future<zeus::File>::get() {
zeus::File out;
zeus::Raw zeus::Future<zeus::Raw>::get() {
if ( m_data == nullptr
|| m_data->m_returnData == nullptr) {
return out;
return zeus::Raw();
}
if (m_data->m_returnData->getType() != zeus::Buffer::typeMessage::answer) {
ZEUS_WARNING("No Return value ...");
return out;
return zeus::Raw();
}
out = static_cast<zeus::BufferAnswer*>(m_data->m_returnData.get())->getAnswer<zeus::File>();
return out;
return static_cast<zeus::BufferAnswer*>(m_data->m_returnData.get())->getAnswer<zeus::Raw>();
}
}

View File

@ -99,20 +99,20 @@ namespace zeus { \
} \
}
generate_basic_type(void, "void", 0x1, false, false);
generate_basic_type(bool, "bool", 0x2, false, false);
generate_basic_type(float, "float", 0x3, true, false);
generate_basic_type(double, "double", 0x4, true, false);
generate_basic_type(int64_t, "int64", 0x5, true, false);
generate_basic_type(int32_t, "int32", 0x6, true, false);
generate_basic_type(int16_t, "int16", 0x7, true, false);
generate_basic_type(int8_t, "int8", 0x8, true, false);
generate_basic_type(uint64_t, "uint64", 0x9, true, false);
generate_basic_type(uint32_t, "uint32", 0xA, true, false);
generate_basic_type(uint16_t, "uint16", 0xB, true, false);
generate_basic_type(uint8_t, "uint8", 0xC, true, false);
generate_basic_type(std::string, "string", 0xD, false, false);
generate_basic_type(void, "void", 0x0001, false, false);
generate_basic_type(bool, "bool", 0x0002, false, false);
generate_basic_type(float, "float", 0x0003, true, false);
generate_basic_type(double, "double", 0x0004, true, false);
generate_basic_type(int64_t, "int64", 0x0005, true, false);
generate_basic_type(int32_t, "int32", 0x0006, true, false);
generate_basic_type(int16_t, "int16", 0x0007, true, false);
generate_basic_type(int8_t, "int8", 0x0008, true, false);
generate_basic_type(uint64_t, "uint64", 0x0009, true, false);
generate_basic_type(uint32_t, "uint32", 0x000A, true, false);
generate_basic_type(uint16_t, "uint16", 0x000B, true, false);
generate_basic_type(uint8_t, "uint8", 0x000C, true, false);
generate_basic_type(std::string, "string", 0x000D, false, false);
generate_basic_type(zeus::Raw, "raw", 0x000E, false, false);
generate_basic_type(std::vector<void>, "vector:empty", 0x0102, true, true);
generate_basic_type(std::vector<bool>, "vector:bool", 0x0102, false, true);
@ -128,6 +128,7 @@ generate_basic_type(std::vector<uint16_t>, "vector:uint16", 0x010B, true, true);
generate_basic_type(std::vector<uint8_t>, "vector:uint8", 0x010C, true, true);
generate_basic_type(std::vector<std::string>, "vector:string", 0x010D, false, true);
#if 0
generate_basic_type(zeus::File, "file", 0x000E, false, false);
generate_basic_type(zeus::FileServer, "file", 0x000E, false, false);

0
zeus/Raw.cpp Normal file
View File

66
zeus/Raw.hpp Normal file
View File

@ -0,0 +1,66 @@
/** @file
* @author Edouard DUPIN
* @copyright 2016, Edouard DUPIN, all right reserved
* @license APACHE v2.0 (see license file)
*/
#pragma once
#include <etk/types.hpp>
namespace zeus {
/**
* @brief Raw data Buffer
*/
class Raw {
private:
uint32_t m_size;
const uint8_t* m_dataExternal;
uint8_t* m_dataInternal;
public:
/**
* @brief generic constructor
*/
Raw() :
m_size(0),
m_dataExternal(nullptr),
m_dataInternal(nullptr) {
}
/**
* @brief generic constructor
*/
Raw(uint32_t _size) :
m_size(_size),
m_dataExternal(nullptr),
m_dataInternal(new uint8_t[_size]) {
}
Raw(uint32_t _size, const uint8_t* _data) :
m_size(_size),
m_dataExternal(_data),
m_dataInternal(nullptr) {
}
~Raw() {
if (m_dataInternal != nullptr) {
delete[] m_dataInternal;
m_dataInternal = nullptr;
}
}
uint32_t size() const {
return m_size;
}
const uint8_t* data() const {
if (m_dataExternal != nullptr) {
return m_dataExternal;
}
return m_dataInternal;
}
};
}

View File

@ -17,4 +17,4 @@ string getMineType()
#brief:get a part of the file (size < 64ko)
#return:Buffer with the data
buffer getPart(uint64, uint64)
raw getPart(uint64, uint64)