Typings for Algorithm are borken
Opened this issue · 3 comments
realted to :
After 7da7678
Actual
class Algorithm{
constructor();
clear(): null;
write(fs: FileStorage): null;fs: FileStorage, name: String): null;
read(fn: FileNode): null;
empty(): boolean;
save(filename: String): null;
getDefaultName(): String;
}
Expected
To be clarified :
- What will be the type of
FileStorage
? - What will be the type of
FileNode
?
class Algorithm{
constructor();
clear(): null;
write(fs: FileStorage): null;
read(fn: FileNode): null;
empty(): boolean;
save(filename: String): null;
getDefaultName(): String;
}
As I always say: code never lies:
I'm checking the function names: static Napi::Value jsopencv_cv_Algorithm_write(const Napi::CallbackInfo &info)
from jsopencv_generated_types_content.h
Napi::Value* jsobj_fs = NULL;
Ptr<cv::FileStorage> fs;
const char* keywords[] = { "fs", NULL };
if (JsArg_ParseTupleAndKeywords(info, "O:Algorithm.write", (char**)keywords, &jsobj_fs) &&
jsopencv_to_safe(jsobj_fs, fs, ArgInfo("fs", 0))) {
ERRWRAP2_NAPI(env, _self_->write(*fs));
return env.Null();;
}```
this call is: Algorithm.write(fs: FileStorage): null;
next down the lines:
```c++
Napi::Value* jsobj_fs = NULL;
Ptr<cv::FileStorage> fs;
Napi::Value* jsobj_name = NULL;
String name;
const char* keywords[] = { "fs", "name", NULL };
if (JsArg_ParseTupleAndKeywords(info, "OO:Algorithm.write", (char**)keywords, &jsobj_fs, &jsobj_name) &&
jsopencv_to_safe(jsobj_fs, fs, ArgInfo("fs", 0)) &&
jsopencv_to_safe(jsobj_name, name, ArgInfo("name", 0)))
{
ERRWRAP2_NAPI(env, _self_->write(*fs, name));
return env.Null();;
}
or: Algorithm.write(fs: FileStorage, name: string): null;
so the expected interface looks like:
class Algorithm{
...
write(fs: FileStorage): null;
write(fs: FileStorage, name: string): null;
...
}
Even if the current implementation of JsArg_ParseTupleAndKeywords will not offer the correct behavior, I will fix that user's small case.
With the current version the second parameter will be ignore, but it easy to fix.
To answer your question FileStorage
will stay as FileStorage
, and so on for FileNode
to check that open the current jsopencv_generated_types_content.h
and look for the section starting with:
//================================================================================
// FileStorage (Generic)
//================================================================================
and
//================================================================================
// FileNode (Generic)
//================================================================================
as I told you before, I prefer to generate a pair or file for each class to improve the development experience and merge them all for the production stage.
A sample class implementation is available in cc-obj/AKAZE.cpp
and cc-obj/AKAZE.h
in the branch named class.
@UrielCh typings should now be ok in the typings branch, please review #10
Create/constructor
The create/constructor convention in opencv is quite obscure for me
I found all versions of it, examples are :
No constructor | constructor | |
---|---|---|
no Create | Abstract Class like DenseOpticalFlow | BOWKMeansTrainer |
create | DescriptorMatcher or AKAZE | BFMatcher |
I'm not sure if those behavior can be the same is js, for now i consider it will be the same.
How will new AKAZE()
behave ?