|
Boost : |
From: Yariv Tal (yariv_tal2003_at_[hidden])
Date: 2005-02-23 09:05:14
You may want to take a look at a small DbC library I'm working on called
ensure++.
You can find it on sourceforge, at http://sourceforge.net/projects/ensure/
It allows you to write the post() part conditions at the _beginning_ of your
method, near the pre conditions.
Quick example: (note that I already have a plan on how to remove the need
for the CONDITIONS, BODY & ENDBODY macros. Software is a constant process of
improvement :) )
void push_back(const T& x) {
CONDITIONS
ENSURE(!post(&vector_contract::empty, this));
ENSURE(post(&vector_contract::size, this) == size() + 1);
// let's ensure (some of) the strong exception guarenttee -
//no change in size in case of exception
EXCEPTIONAL(post(&vector_contract::size, this) == size());
BODY
inherited::push_back(x);
ENDBODY
}
void pop_back() {
CONDITIONS
REQUIRE(!empty());
ENSURE(post(&vector_contract::size, this) == size() - 1);
// let's ensure (some of) the strong exception guarenttee -
//no change in size in case of exception
EXCEPTIONAL(post(&vector_contract::size, this) == size());
BODY
inherited::pop_back();
ENDBODY
}
[I'm writing this example on the fly - so don't kill me if it doesn't quite
compile after you download the lib]
It's not documented (yet) but you can see a test/sample file under the vc7.1
directory.
Yariv Tal
"christopher diggins" <cdiggins_at_[hidden]> wrote in message
news:000501c51979$cc1d32d0$d9958242_at_heronnest...
> I am writing a set of contract verification classes for the various STL
> containers. These are wrapper classes which verify DbC style contracts
(i.e.
> preconditions, postconditions and invariants). I have already written one
> for std::vector you can see it at: http://www.ootl.org/pwc/
>
> Is anyone interested in seeing this submitted Boost, if I extend it to
cover
> the basic collections? e.g. list, map, set, multimap, multiset, deque,
> queue, stack?
>
> Thanks,
>
> Christopher Diggins
> Object Oriented Template Library (OOTL)
> http://www.ootl.org
>
> _______________________________________________
> Unsubscribe & other changes:
http://lists.boost.org/mailman/listinfo.cgi/boost
>
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk