digitalmars.D.learn - Cover handler for a statement or a block of statements.
- vincent <vincent.risi gmail.com> Jun 08 2011
- "Jonathan M Davis" <jmdavisProg gmx.com> Jun 08 2011
- simendsjo <simen.endsjo pandavre.com> Jun 08 2011
Cover handler for a statement or a block of statements.
I would like to suggest a method for defining code statement
covering. Some examp1es of a cover are as follows :-
- try ... finally - this is defined in dotnet as a using
- try ... (catch)+
- cursor save and display others ... restore saved cursor
a possible syntax -
cover hourglass(Application &app)
{
Cursor save = app.cursor;
app.cursor = HOURGLASS_CURSOR;
~ code ~
app.cursor = save;
}
usage could be something like -
void function(Application &app)
{
hourglass(app)
{
... // code to be run by cover
}
}
Jun 08 2011
On 2011-06-08 12:06, vincent wrote:Cover handler for a statement or a block of statements. I would like to suggest a method for defining code statement covering. Some examp1es of a cover are as follows :- - try ... finally - this is defined in dotnet as a using - try ... (catch)+ - cursor save and display others ... restore saved cursor a possible syntax - cover hourglass(Application &app) { Cursor save = app.cursor; app.cursor = HOURGLASS_CURSOR; ~ code ~ app.cursor = save; } usage could be something like - void function(Application &app) { hourglass(app) { ... // code to be run by cover } }
That would typically be done with either a struct with a destructor or with a scope statement. - Jonathan M Davis
Jun 08 2011
On 08.06.2011 21:09, Jonathan M Davis wrote:On 2011-06-08 12:06, vincent wrote:Cover handler for a statement or a block of statements. I would like to suggest a method for defining code statement covering. Some examp1es of a cover are as follows :- - try ... finally - this is defined in dotnet as a using - try ... (catch)+ - cursor save and display others ... restore saved cursor a possible syntax - cover hourglass(Application&app) { Cursor save = app.cursor; app.cursor = HOURGLASS_CURSOR; ~ code ~ app.cursor = save; } usage could be something like - void function(Application&app) { hourglass(app) { ... // code to be run by cover } }
That would typically be done with either a struct with a destructor or with a scope statement. - Jonathan M Davis
To give Jonathan's answer an example. import std.stdio; void main() { class Cursor { string name = "regular"; } class Application { private Cursor _cursor; property Cursor cursor() { return _cursor; } property void cursor(Cursor value) { writeln("setting cursor ", value.name); _cursor = value; } this() { _cursor = new Cursor(); } } auto app = new Application(); auto HOURGLASS_CURSOR = new Cursor(); HOURGLASS_CURSOR.name = "hourglass"; writeln("try/finally:"); auto save = app.cursor; try { app.cursor = HOURGLASS_CURSOR; writeln("code here"); } finally { app.cursor = save; } writeln("\nor scope(exit):"); { save = app.cursor; scope(exit) app.cursor = save; app.cursor = HOURGLASS_CURSOR; writeln("code here"); } } Outputs try/finally: setting cursor hourglass code here setting cursor regular or scope(exit): setting cursor hourglass code here setting cursor regular
Jun 08 2011








simendsjo <simen.endsjo pandavre.com>