package main import ( "sort" ) // astTransformConstructorOrder creates a canonical ordering for constructors // where the 0th entry is any entry taking solely a QWidget* parameter. // This is so that UIC can safely assume this for types. // @ref https://github.com/mappu/miqt/issues/46 func astTransformConstructorOrder(parsed *CppParsedHeader) { // QFoo(QWidget* parent); checkIsDefaultCtor := func(candidate CppMethod) bool { return len(candidate.Parameters) == 1 && candidate.Parameters[0].ParameterType == "QWidget" && candidate.Parameters[0].Pointer } // Iterate all classes for i, c := range parsed.Classes { // Sort sort.SliceStable(c.Ctors, func(i, j int) bool { ic := checkIsDefaultCtor(c.Ctors[i]) jc := checkIsDefaultCtor(c.Ctors[j]) if ic && !jc { return true } return false }) // Persist mutation parsed.Classes[i] = c } }