1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00
ruby-opencv/ext/opencv/dnn_layer.cpp
2018-07-27 00:10:39 -07:00

79 lines
2 KiB
C++

#include "opencv2/dnn.hpp"
#include "opencv.hpp"
#include "error.hpp"
/*
* Document-class: Cv::Dnn::Layer
*/
namespace rubyopencv {
namespace Dnn {
namespace Layer {
VALUE rb_klass = Qnil;
void free_layer(void* ptr) {
delete (cv::dnn::Layer*)ptr;
}
size_t memsize_layer(const void* ptr) {
return sizeof(cv::dnn::Layer);
}
rb_data_type_t opencv_layer_type = {
"Dnn::Layer", { 0, free_layer, memsize_layer, }, 0, 0, 0
};
VALUE layer2obj(cv::dnn::Layer* ptr) {
return TypedData_Wrap_Struct(rb_klass, &opencv_layer_type, ptr);
}
cv::dnn::Layer* obj2layer(VALUE obj) {
cv::dnn::Layer* ptr = NULL;
TypedData_Get_Struct(obj, cv::dnn::Layer, &opencv_layer_type, ptr);
return ptr;
}
VALUE rb_allocate(VALUE klass) {
cv::dnn::Layer* ptr = NULL;
return TypedData_Wrap_Struct(klass, &opencv_layer_type, ptr);
}
VALUE rb_initialize(VALUE self) {
return self;
}
/*
* Returns the layer name
* @overload name
* @return [String] Layer name
*/
VALUE rb_name(VALUE self) {
cv::dnn::Layer* selfptr = obj2layer(self);
return rb_str_new_cstr(selfptr->name.c_str());
}
/*
* Returns the layer type
*
* @overload type
* @return [String] Layer type
*/
VALUE rb_type(VALUE self) {
cv::dnn::Layer* selfptr = obj2layer(self);
return rb_str_new_cstr(selfptr->type.c_str());
}
void init() {
VALUE opencv = rb_define_module("Cv");
VALUE dnn = rb_define_module_under(opencv, "Dnn");
rb_klass = rb_define_class_under(dnn, "Layer", rb_cData);
rb_define_alloc_func(rb_klass, rb_allocate);
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), 0);
rb_define_method(rb_klass, "name", RUBY_METHOD_FUNC(rb_name), 0);
rb_define_method(rb_klass, "type", RUBY_METHOD_FUNC(rb_type), 0);
}
}
}
}