Re: We do not use C++ exceptions
On Jan 14, 12:37 pm, Mathias Gaunard <loufo...@gmail.com> wrote:
On 14 jan, 01:19, Le Chaud Lapin <jaibudu...@gmail.com> wrote:
Here is example of big-integer division code that could be buried deep
within a cryptographic operation:
Integer operator / (const Integer ÷nd, const Integer &divisor)
{
Integer quotient, remainder;
if (!Integer::divide (dividend, divisor, quotient, remainder))
throw Integer::DIVISION_BY_ZERO;
return quotient;
}
Integer::divide() returns true for success, false for failure, but
operator / would lose all its beauty if it had to return an error:
Why not throw directly from Integer::divide?
You could also return a tuple (here, a pair) rather than taking
objects to modify by reference.
This would likely result in more efficient code, for a number of
reasons.
Hmm...I thought I had a reason, but after checking and rechecking my
Integer.cpp file, I cannot find one, so thanks...I will do just
that. :)
For example,
millions, if not billions, of lines of C++ have been written, and we
still do not have obviously fundamental classes like hierarchies and
associative hierarchies.
A recursive variant might provide the kind of thing you're looking
for. See Boost.Variant.
This is usually how trees are handled in high-level languages, be it
functional ones (where the variant is explicit) or dynamic ones (where
the variant is implicit, it's the dynamic typing).
I have several templated hierarchy classes, with operations and O(n)
that one would reasonable expect: not spectactular, but O[log(n)]
where it matters.
Property trees are also a nice way to deal with trees. (You associate
a path in a tree with a value, quite useful for hierarchical
configuration files)
You might want to look at Boost.PropertyTree.
That would be...
typedef Associative_Monarchy<String<>, Associative_Set<String<>,
String<> > > PropertyTree;
PropertyTree::Path path;
.... in the my model.
I agree that one can get very close to XML-like internal data
structures very quickly with these types of containers.
And the reachability provide by combining such primitives, along with
the regular list<>, set<>, map<>, etc., is staggering.
-Le Chaud Lapin-
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]