Kexi/Junior Jobs/Add d-pointers: Difference between revisions
< Kexi | Junior Jobs
mNo edit summary |
|||
Line 57: | Line 57: | ||
} | } | ||
</source> | </source> | ||
==Further tasks== | |||
== | |||
Converting non-trivial classes to use d-pointer may also require: | Converting non-trivial classes to use d-pointer may also require: | ||
*any code in the class' .cpp file referring to m_foo attribute should be changed to d->foo | *any code in the class' .cpp file referring to m_foo attribute should be changed to d->foo | ||
Line 119: | Line 113: | ||
</source> | </source> | ||
* | *Alter any code outside of the class that uses the class' API so that the code compiles and runs in exactly the same way as before. | ||
*If there is inline code in header file that uses member variable, move the variable to d-pointer class if you know for sure the inline code isn't there for optimization. If unsure, ask the mentor or the task maintainer. | |||
*After the work is done, the code should be compiled and possibly the program should be executed to check if there are no regressions. | |||
==Required skills== | ==Required skills== | ||
Line 127: | Line 123: | ||
*This task can be naturally splited to many students but please have consistency in mind | *This task can be naturally splited to many students but please have consistency in mind | ||
*Results are stored within a new branch kexi-dpointers-gci, should be created and maintained by mentor | *Results are stored within a new branch kexi-dpointers-gci, should be created and maintained by mentor | ||
*The resulting patch should be also uploaded to http://git.reviewboard.kde.org | |||
*Mentor should synchronize students' work within the single branch | *Mentor should synchronize students' work within the single branch | ||
*Please always emphasize importance of coding style to students and check that - it's so easier to maintain the style from day one instead of fixing afterwards. Show [http://techbase.kde.org/Policies/Kdelibs_Coding_Style Techbase articles] for that. | *Please always emphasize importance of coding style to students and check that - it's so easier to maintain the style from day one instead of fixing afterwards. Show [http://techbase.kde.org/Policies/Kdelibs_Coding_Style Techbase articles] for that. | ||
*Take care of coding practices too (see [http://techbase.kde.org/Development/Tutorials/Common_Programming_Mistakes Techbase articles]) | *Take care of coding practices too (see [http://techbase.kde.org/Development/Tutorials/Common_Programming_Mistakes Techbase articles]) |
Revision as of 20:23, 21 November 2011
- maintainer of this task: staniek at kde.org
- OPEN, DIFFICULTY=2/5
- Recommended for Google Code-IN program
Goal
Improve internal APIs in Kexi. This can be done easily by introducing d-poitners to classes that lack them.
Introduction
Read section about d-pointers on Techbase (d-pointers only, not shared d-pointers).
Classes that have to be converted are in this form:
// MyClass.h
class MyClass {
public:
MyClass();
private:
Foo m_foo;
};
// MyClass.cpp
MyClass::MyClass() {
m_foo/doSomething();
}
After converting to d-pointer it should be:
// MyClass.h
class MyClass {
public:
MyClass();
private:
class Private;
Private * const d;
};
// MyClass.cpp
class MyClass::Private {
public:
Private()
Foo foo;
};
MyClass::MyClass()
: d(new Private)
{
d->foo.doSomething();
}
MyClass::~MyClass()
{
delete d;
}
Further tasks
Converting non-trivial classes to use d-pointer may also require:
- any code in the class' .cpp file referring to m_foo attribute should be changed to d->foo
- if there were public or protected member variables, move them to the d-pointer class and add accessors and setters for them as in the example below. Read about guildelines for accessors and setters on Techbase.
// MyClass.h
class MyClass {
public:
MyClass();
bool isBlack;
};
After converting to d-pointer it should be:
// MyClass.h
class MyClass {
public:
MyClass();
bool isBlack() const; // notice the const
void setBlack(bool black);
private:
class Private;
Private * const d;
};
// MyClass.cpp
class MyClass::Private {
public:
Private()
bool isBlack;
};
MyClass::MyClass()
: d(new Private)
{
d->foo.doSomething();
}
MyClass::~MyClass()
{
delete d;
}
bool isBlack() const
{
return d->isBlack;
}
void setBlack(bool black)
{
d->isBlack = black;
}
- Alter any code outside of the class that uses the class' API so that the code compiles and runs in exactly the same way as before.
- If there is inline code in header file that uses member variable, move the variable to d-pointer class if you know for sure the inline code isn't there for optimization. If unsure, ask the mentor or the task maintainer.
- After the work is done, the code should be compiled and possibly the program should be executed to check if there are no regressions.
Required skills
Average C++ needed, at least begginner no Qt recommended.
Notes to mentor
- This task can be naturally splited to many students but please have consistency in mind
- Results are stored within a new branch kexi-dpointers-gci, should be created and maintained by mentor
- The resulting patch should be also uploaded to http://git.reviewboard.kde.org
- Mentor should synchronize students' work within the single branch
- Please always emphasize importance of coding style to students and check that - it's so easier to maintain the style from day one instead of fixing afterwards. Show Techbase articles for that.
- Take care of coding practices too (see Techbase articles)