Sketcher: ExternalGeometryExtension - refactor flag string to type in static function
This commit is contained in:
committed by
abdullahtahiriyo
parent
d0930a545f
commit
21b4f4f1da
@@ -85,3 +85,20 @@ PyObject * ExternalGeometryExtension::getPyObject(void)
|
||||
return new ExternalGeometryExtensionPy(new ExternalGeometryExtension(*this));
|
||||
}
|
||||
|
||||
bool ExternalGeometryExtension::getFlagsFromName(std::string str, ExternalGeometryExtension::Flag &flag)
|
||||
{
|
||||
auto pos = std::find_if( ExternalGeometryExtension::flag2str.begin(),
|
||||
ExternalGeometryExtension::flag2str.end(),
|
||||
[str](const char * val) {
|
||||
return strcmp(val,str.c_str())==0;}
|
||||
);
|
||||
|
||||
if( pos != ExternalGeometryExtension::flag2str.end()) {
|
||||
int index = std::distance( ExternalGeometryExtension::flag2str.begin(), pos );
|
||||
|
||||
flag = static_cast<ExternalGeometryExtension::Flag>(index);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -87,6 +87,8 @@ public:
|
||||
virtual const std::string& getRef() const override {return Ref;}
|
||||
virtual void setRef(const std::string & ref) override {Ref = ref;}
|
||||
|
||||
static bool getFlagsFromName(std::string str, ExternalGeometryExtension::Flag &flag);
|
||||
|
||||
private:
|
||||
ExternalGeometryExtension(const ExternalGeometryExtension&) = default;
|
||||
|
||||
|
||||
@@ -104,15 +104,10 @@ PyObject* ExternalGeometryExtensionPy::testFlag(PyObject *args)
|
||||
char* flag;
|
||||
if (PyArg_ParseTuple(args, "s",&flag)) {
|
||||
|
||||
auto pos = std::find_if(getExternalGeometryExtensionPtr()->flag2str.begin(),
|
||||
getExternalGeometryExtensionPtr()->flag2str.end(),
|
||||
[flag](const char * val) { return strcmp(val,flag) == 0;});
|
||||
ExternalGeometryExtension::Flag flagtype;
|
||||
|
||||
if( pos != getExternalGeometryExtensionPtr()->flag2str.end()) {
|
||||
int index = std::distance( getExternalGeometryExtensionPtr()->flag2str.begin(), pos );
|
||||
|
||||
return new_reference_to(Py::Boolean(this->getExternalGeometryExtensionPtr()->testFlag(index)));
|
||||
}
|
||||
if(getExternalGeometryExtensionPtr()->getFlagsFromName(flag, flagtype))
|
||||
return new_reference_to(Py::Boolean(this->getExternalGeometryExtensionPtr()->testFlag(flagtype)));
|
||||
|
||||
PyErr_SetString(PyExc_TypeError, "Flag string does not exist.");
|
||||
return NULL;
|
||||
@@ -129,16 +124,11 @@ PyObject* ExternalGeometryExtensionPy::setFlag(PyObject *args)
|
||||
PyObject * bflag = Py_True;
|
||||
if (PyArg_ParseTuple(args, "s|O!", &flag, &PyBool_Type, &bflag)) {
|
||||
|
||||
auto pos = std::find_if(getExternalGeometryExtensionPtr()->flag2str.begin(),
|
||||
getExternalGeometryExtensionPtr()->flag2str.end(),
|
||||
[flag](const char * val) {
|
||||
return strcmp(val,flag)==0;}
|
||||
);
|
||||
ExternalGeometryExtension::Flag flagtype;
|
||||
|
||||
if( pos != getExternalGeometryExtensionPtr()->flag2str.end()) {
|
||||
int index = std::distance( getExternalGeometryExtensionPtr()->flag2str.begin(), pos );
|
||||
if(getExternalGeometryExtensionPtr()->getFlagsFromName(flag, flagtype)) {
|
||||
|
||||
this->getExternalGeometryExtensionPtr()->setFlag(index,PyObject_IsTrue(bflag) ? true : false);
|
||||
this->getExternalGeometryExtensionPtr()->setFlag(flagtype,PyObject_IsTrue(bflag) ? true : false);
|
||||
Py_Return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user