doxygen-users Mailing List for Doxygen (Page 554)
Brought to you by:
dimitri
You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(118) |
Jun
(150) |
Jul
(115) |
Aug
(75) |
Sep
(92) |
Oct
(102) |
Nov
(139) |
Dec
(87) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(131) |
Feb
(60) |
Mar
(114) |
Apr
(83) |
May
(125) |
Jun
(82) |
Jul
(95) |
Aug
(98) |
Sep
(109) |
Oct
(97) |
Nov
(72) |
Dec
(70) |
| 2003 |
Jan
(117) |
Feb
(122) |
Mar
(187) |
Apr
(114) |
May
(154) |
Jun
(131) |
Jul
(130) |
Aug
(98) |
Sep
(121) |
Oct
(107) |
Nov
(80) |
Dec
(54) |
| 2004 |
Jan
(78) |
Feb
(71) |
Mar
(118) |
Apr
(56) |
May
(56) |
Jun
(64) |
Jul
(164) |
Aug
(104) |
Sep
(101) |
Oct
(69) |
Nov
(107) |
Dec
(98) |
| 2005 |
Jan
(75) |
Feb
(77) |
Mar
(107) |
Apr
(114) |
May
(142) |
Jun
(106) |
Jul
(79) |
Aug
(108) |
Sep
(115) |
Oct
(140) |
Nov
(128) |
Dec
(63) |
| 2006 |
Jan
(86) |
Feb
(71) |
Mar
(125) |
Apr
(55) |
May
(48) |
Jun
(143) |
Jul
(99) |
Aug
(91) |
Sep
(93) |
Oct
(82) |
Nov
(46) |
Dec
(45) |
| 2007 |
Jan
(69) |
Feb
(97) |
Mar
(125) |
Apr
(112) |
May
(65) |
Jun
(80) |
Jul
(82) |
Aug
(84) |
Sep
(56) |
Oct
(74) |
Nov
(63) |
Dec
(74) |
| 2008 |
Jan
(161) |
Feb
(115) |
Mar
(58) |
Apr
(73) |
May
(58) |
Jun
(79) |
Jul
(57) |
Aug
(115) |
Sep
(79) |
Oct
(62) |
Nov
(93) |
Dec
(37) |
| 2009 |
Jan
(69) |
Feb
(115) |
Mar
(77) |
Apr
(85) |
May
(124) |
Jun
(58) |
Jul
(44) |
Aug
(85) |
Sep
(90) |
Oct
(80) |
Nov
(87) |
Dec
(48) |
| 2010 |
Jan
(52) |
Feb
(71) |
Mar
(54) |
Apr
(37) |
May
(66) |
Jun
(86) |
Jul
(84) |
Aug
(68) |
Sep
(94) |
Oct
(66) |
Nov
(36) |
Dec
(53) |
| 2011 |
Jan
(59) |
Feb
(77) |
Mar
(59) |
Apr
(67) |
May
(76) |
Jun
(54) |
Jul
(95) |
Aug
(92) |
Sep
(84) |
Oct
(72) |
Nov
(46) |
Dec
(60) |
| 2012 |
Jan
(43) |
Feb
(77) |
Mar
(88) |
Apr
(121) |
May
(81) |
Jun
(69) |
Jul
(97) |
Aug
(64) |
Sep
(55) |
Oct
(55) |
Nov
(38) |
Dec
(60) |
| 2013 |
Jan
(85) |
Feb
(70) |
Mar
(81) |
Apr
(83) |
May
(51) |
Jun
(65) |
Jul
(71) |
Aug
(39) |
Sep
(47) |
Oct
(32) |
Nov
(43) |
Dec
(28) |
| 2014 |
Jan
(64) |
Feb
(22) |
Mar
(54) |
Apr
(20) |
May
(59) |
Jun
(20) |
Jul
(50) |
Aug
(17) |
Sep
(37) |
Oct
(56) |
Nov
(40) |
Dec
(24) |
| 2015 |
Jan
(51) |
Feb
(29) |
Mar
(57) |
Apr
(31) |
May
(23) |
Jun
(50) |
Jul
(30) |
Aug
(66) |
Sep
(59) |
Oct
(21) |
Nov
(29) |
Dec
(12) |
| 2016 |
Jan
(33) |
Feb
(30) |
Mar
(19) |
Apr
(23) |
May
(16) |
Jun
(31) |
Jul
(17) |
Aug
(19) |
Sep
(21) |
Oct
(20) |
Nov
(15) |
Dec
(6) |
| 2017 |
Jan
(16) |
Feb
(13) |
Mar
(16) |
Apr
(23) |
May
(16) |
Jun
(5) |
Jul
(14) |
Aug
(13) |
Sep
(12) |
Oct
(11) |
Nov
(3) |
Dec
(6) |
| 2018 |
Jan
(4) |
Feb
(6) |
Mar
(5) |
Apr
(11) |
May
(26) |
Jun
(5) |
Jul
(10) |
Aug
(7) |
Sep
(3) |
Oct
|
Nov
(3) |
Dec
(7) |
| 2019 |
Jan
(17) |
Feb
(18) |
Mar
(5) |
Apr
(6) |
May
(3) |
Jun
|
Jul
(9) |
Aug
(19) |
Sep
(3) |
Oct
(1) |
Nov
(23) |
Dec
(5) |
| 2020 |
Jan
(7) |
Feb
(1) |
Mar
(7) |
Apr
(11) |
May
(8) |
Jun
(7) |
Jul
(10) |
Aug
(3) |
Sep
(4) |
Oct
(7) |
Nov
(6) |
Dec
|
| 2021 |
Jan
(3) |
Feb
|
Mar
(4) |
Apr
(4) |
May
|
Jun
|
Jul
(1) |
Aug
(3) |
Sep
|
Oct
|
Nov
(8) |
Dec
(3) |
| 2022 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
|
May
(3) |
Jun
(1) |
Jul
|
Aug
(3) |
Sep
(9) |
Oct
(2) |
Nov
|
Dec
(2) |
| 2023 |
Jan
(2) |
Feb
(5) |
Mar
(3) |
Apr
(7) |
May
(6) |
Jun
(2) |
Jul
(5) |
Aug
|
Sep
(4) |
Oct
(1) |
Nov
(5) |
Dec
(5) |
| 2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
(4) |
Jul
|
Aug
(3) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
|
From: Phil E. <ped...@di...> - 2001-09-19 19:33:32
|
I'm using Doxygen 1.2.10 to generate HTML for GNU's libstdc++. Using member
groups to group/distribute documentation works fine with global functions,
like
//@{
/** These are replaceable signatures:
* blah blah blah
*/
void *operator new(std::size_t) throw (std::bad_alloc);
void *operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void *) throw();
.....
//@}
But not with templates. Trying things like
namespace std
{
/** General documentation about both of these classes.
*/
//@{
template <class _Arg, class _Result>
struct unary_function {
...
};
template <class _Arg1, class _Arg2, class _Result>
struct binary_function {
...
};
//@}
The namespace is documented; other members show up okay. But here, only
unary_function is considered documented. Nothing about binary_function
shows up at all. The config file has DISTRIBUTE_GROUP_DOC set to YES.
Am I missing anything? (Please Cc me, I'm not subscribed.)
Thanks,
Phil
--
Would I had phrases that are not known, utterances that are strange, in
new language that has not been used, free from repetition, not an utterance
which has grown stale, which men of old have spoken.
- anonymous Egyptian scribe, c.1700 BC
|
|
From: Luigi B. <lui...@ri...> - 2001-09-17 15:32:05
|
Hi all (and especially Dimitri), I found a few small glitches in the generation of cross-links between brief and detailed docs in derived classes. The comments in the attached file should tell the whole story. The strange behavior is triggered by generating a fresh Doxyfile and setting INPUT = test.cpp REPEAT_BRIEF = NO Thanks, Luigi |
|
From: Kris T. <kri...@ic...> - 2001-09-14 15:07:39
|
This is fun indeed. Maybe not practical, but ok...
> DEFINITION:
> Class A is CONTAINED in class B if and only if class B has
> an instance (not pointer or reference) member variable to class A.
>
fine for me
> DEFINITION:
> Class A is USED-BY class B if and only if in some member
> functions of class B invokes a member function of class A.
>
> (I say member function, because we make all our member variables
> private, right?)
>
fine for me as well. Except that I would include member variables in the
definition. That way, you wouldn't have to add anything specific for friends
below (if it's a friend, but doesn't use any of its members, there wasn't a
point in having it a friend anyway).
Here's one practical problem for doxygen: to decide on this, it would have
to parse the actual C++ code, and in particular the implementations of the
member functions. I don't think doxygen does this, and I don't think it
would be easy. Sounds much more like real compilation to me.
In particular, for nearly all purposes, you can get away with doxygening
only the .h files (except of you put doxygen comments in .cxx).
> struct A { void Foo(void){} };
>
> CASE I (Instance)
> 1) class B { A a; void Bar(void) {a.Foo();} };
> 2) class B { A a[10]; void Bar(void) {a[0].Foo();} }; // ??
> 3) class B { void Bar(A a) {a.Foo();} };
> CASE II (Pointer)
> 1) class B { A *a; void Bar(void) {a->Foo();} };
> 2) class B { void Bar(A *a) {a->Foo();} };
> CASE III (Reference)
> 1) class B { A &a; void Bar(void) {a.Foo();} };
> 2) class B { void Bar(A &a) {a.Foo();} };
>
> We need to be careful in handling cases II and III, because
> B does not necessarily invoke any public member function of A...
> However, in reality, Doxygen simply concludes that class A is USED-BY
> Class B in cases II.1 and III.1 It does not consider II.2 or III.2
> Perhaps it should?
>
I.2 seems an obvious candidate as well
>
> DEFINITION:
> Class A is DIRECTLY-RELATED to class B if and only if class
> A is CONTAINED in class B, or class A is USED-BY class B, or class
> B is a FRIEND to class A.
>
fine for me.
> CASE IV (Template)
tough and so on. But I'm afraid that if you don't handle it, a lot of my
code will not see any benefit if all this.
> > "Is the result of a solution of the problem worth of the
> > complexity of the solution?"
>
> Probably not... Oh well, life is full of tradeoff's. :)
>
if you ask me, it means that 'collaboration diagrams' are very diffiuclt to
make sensible. In such a case, it is better to disable them in my opinion.
Incomplete doc is more confusing than no doc.
In any case, I can get so graphs in my doc from doxygen nowadays that it all
looks stunning enough already!
> It has been fun typing this message. Thank you for
> your time if you made it this far.
you're welcome.
Kris Thielemans
Imaging Research Solutions Ltd
Cyclotron Building
Hammersmith Hospital
Du Cane Road
London W12 ONN, United Kingdom
web site address:
http://www.irsl.org/~kris
|
|
From: Wagner, V. <VW...@se...> - 2001-09-14 14:57:46
|
Sorry, I forget to hit 'reply all'
-----Original Message-----
From: Wagner, Victor
Sent: Thursday, 2001 September 13 15:46
To: 'Dimitri van Heesch'
Subject: RE: [Doxygen-users] Class collaboration
IMO, it is far more important to know that
std::vector<Widget*> gorph;
is about Widget*s than std::vector.... mayhaps when you show the 'name' of
the var involved with the collaboration, you could show it simply by showing
the entire definition instead of just the name...or drop out the Class name
for consistency with my proposal in the 'nit' paragraph.
std::vector<*> gorph
and place it next to the 'arrow' pointing to Widget
NIT
BTW, minor nit (and not big enough to comment on until I'm commenting on
something closely related)
when we have the arrows in the collaboration graph, there is NO distinction
between member objects, member pointers to objects or member references to
objects (might be nice).... syntax for pointer and reference are easy (* and
& respectively adjacent to the name)
I'm immensely pleased with Doxygen, keep up the good work.
-----Original Message-----
From: Dimitri van Heesch [mailto:di...@st...]
Sent: Thursday, 2001 September 13 14:52
To: dox...@li...
Subject: Re: [Doxygen-users] Class collaboration
On Thu, Sep 13, 2001 at 12:51:43PM -0300, Anthony Yuen wrote:
>
> Hi, I found another "problem" that "bugs" me (pun intended!).
> In the class collaboration diagram that is generated, I think something
> is not quite right. Let me give an example:
>
> class A { /* some methods */ };
>
> class B { std::vector<A *> vec; };
>
> I'm just using the std::vector as an example. It can be any
> kind of (STL) container. Even though this strongly suggests that
> class B somehow uses class A for "something" (in my case, B *does*
> make use of A, which is why B stores a vector of pointers to A),
> Doxygen does not conclude that there is collaboration between A and B.
> This can be extended to include the use of smart pointers stored
> in a container.
>
> I'm interested to know if this is the intended behaviour. If
> so, what is the reason behind? If not, maybe this is a bug?
Currently this is intended behaviour, but I would like to hear what other
people think about this. Should template arguments, such as in the example
above, be visualised in collaboration diagrams? and if so, how? Does UML
cover these kind of relations?
Regards,
Dimitri
_______________________________________________
Doxygen-users mailing list
Dox...@li...
https://lists.sourceforge.net/lists/listinfo/doxygen-users
This transmission may contain information that is privileged, confidential
and exempt from disclosure under applicable law.
If you are not the intended recipient, you are hereby notified that any
disclosure, copying, distribution, or use of the information contained
herein (including any reliance thereon) is STRICTLY PROHIBITED.
If you received this transmission in error, please immediately contact the
sender and destroy the material in its entirety, whether in electronic or
hard copy format.
Thank you
|
|
From: Anthony Y. <an...@ac...> - 2001-09-14 14:33:20
|
I'm a rather lazy person and that's the whole reason I'm using a tool such as Doxygen to automatically generate some nice reference manuals from my messy source code. :) But I agree that it would be nice to have the option when you REALLY need it! But most of the time, I would avoid doing anything "manually" when writing "manuals". :) Happy Doxygening! I'm quite impressed by the quality of the generated materials by Doxygen. I'm a happy users (with some minor complaints/whines/rants). :) -----Original Message----- From: dox...@li... [mailto:dox...@li...] On Behalf Of Prikryl,Petr Sent: Friday, 14 September, 2001 09:32 To: dox...@li... Subject: RE: [Doxygen-users] Class collaboration Hi Kris, I agree that adding some extra command to manually mark the relation between the classes would be fine. Majority probably do not need some general solution of that kind. Those who need to capture the relationship of that special kind would probably agree to insert it manually. I cannot argue here. I belong to the majority ;-) Petr -- |
|
From: Anthony Y. <an...@ac...> - 2001-09-14 14:26:09
|
Let me take the discussion a little further since I started
it...
A fair warning, it is a bit long...
[snip]
> "Should only direct relations be considered in the
> collaboration diagram?"
My answer to this question is YES. But it would be helpful
to define exactly what "direct relation" is. I'll quote from
the "graph legend":
"A purple dashed arrow is used if a class is contained
or used by another class. The arrow is labeled with the
variable(s) through which the pointed class or struct
is accessible."
So, in fact, keep in mind that Doxygen already considers (plain)
pointers to another class as a collaboration. This means the "level of
indirect relation" is 2 (see below). Then why does Doxygen put
a "purple dashed arrow" if there is a "pointed class" inside
another class? Let's examine a possible reason for that.
It is clear what "a class is contained" means. It means
that: if class B has an instance member variable to class A, then
we say "class A is contained in B". Should a pointer to class A count
as "contained in" too? No, I don't think so. Even if sizeof(A)
changes,
sizeof(B) doesn't, because B only contains a pointer (or reference).
This is a proof that class A is *not* contained in class B.
DEFINITION:
Class A is CONTAINED in class B if and only if class B has
an instance (not pointer or reference) member variable to class A.
This leaves us the second way to get a "purple dashed arrow",
which is when class A is "used" by class B. But what is "used"?
How do you define "used"? Here is a reasonable definition:
DEFINITION:
Class A is USED-BY class B if and only if in some member
functions of class B invokes a member function of class A.
(I say member function, because we make all our member variables
private, right?)
Obviously, this includes (public, protected, private)
inheritance
relationships, since a derived class, at the minimum, must invoke
the base class constructor(s) and destructor. Doxygen handles these
separately.
Exploring further, we see that if class B invokes a public
member function of class A, then class A is USED-BY class B. How is
this
possible? There are 3 ways in C++: instance, pointer, reference.
struct A { void Foo(void){} };
CASE I (Instance)
1) class B { A a; void Bar(void) {a.Foo();} };
2) class B { A a[10]; void Bar(void) {a[0].Foo();} }; // ??
3) class B { void Bar(A a) {a.Foo();} };
CASE II (Pointer)
1) class B { A *a; void Bar(void) {a->Foo();} };
2) class B { void Bar(A *a) {a->Foo();} };
CASE III (Reference)
1) class B { A &a; void Bar(void) {a.Foo();} };
2) class B { void Bar(A &a) {a.Foo();} };
We need to be careful in handling cases II and III, because
B does not necessarily invoke any public member function of A...
However, in reality, Doxygen simply concludes that class A is USED-BY
Class B in cases II.1 and III.1 It does not consider II.2 or III.2
Perhaps it should?
Should a friend class be considered a collaboration? Sure.
Otherwise, the two classes shouldn't be friends in the first place.
The reason you made class B a FRIEND to class A is so that B can
invoke protected or private member functions of A... Doxygen does not
handle this case either.
In conclusion, what is a "direct relation"?
DEFINITION:
Class A is DIRECTLY-RELATED to class B if and only if class
A is CONTAINED in class B, or class A is USED-BY class B, or class
B is a FRIEND to class A.
The above is my humble opinion on what a "direct relation" is.
It is by no means exhaustive or scientifically rigorous.
>If the answer is no, then main() (for example) is a
>function that is indirectly related to almost everything
>in the program -- except the part hidden in
>implementation parts (.c, .cpp). If I use here some
>object of the class that hides inside the whole
>functionality of the application, then the collaboration graph
>of that class would be very complex and it would contain almost
>every class of the application. (Well, this is rather.
>simplified, but I hope you understand the point.)
Yes, I see a problem here, if the "level of indirect
Relation" is allowed to be "infinity".
>If the above were accepted, then the only reasonable
>solution would be to define the maximum level of indirect
>relations. Say, 1 (one) is the level when we think only
>about direct relations.
Agreed, if you consider my definition of a direct relation.
>Now, std::vector<A> is a vector of instances of class A.
>The mentioned example of std::vector<A *> is vector of
>pointers to such instances. Even when you know how
>std::vector<whatever> may look like inside---from the abstract
>point of view---you should agree that the "whatever" is hidden
>inside something lager. If "vec" is the object of that class, then
>"whatever" is somehow hidden inside. So, I would mark
>the level of collaboration between B and "whatever" using
>at least value 2. Moreover, if the "whatever" is a
>pointer to "something-else", I would mark the level of
>collaboration between B and "something-else" using at
>least the value 3.
I agree that "whatever" is hidden. But if class B invokes
a public member function of class A, through the vector or
some other kind of container, then class A is USED-BY class B.
Another way of "justifying" a collaboration between A
and B is that, std::vector<A> (or std::vector<A *>) is a type
that depends on A. So A is USED-BY B to create a new type.
Hence, we have a CASE IV:
CASE IV (Template)
1) template <typename T> class B {}; B<A> b;
2) class B { template <typename T> void Bar(void){} };
B b; b.Bar<A>();
3) class B { some_template<A> t_a; };
Of course, there are many variations on this theme, but
I hope you get the idea.
This CASE IV is what complicates things by many orders of
magnitudes. And I wouldn't want to be the person to try to
solve it. :)
>Even more serious problem is that the argument of any
>template is used textually inside the body of the
>template. This also means that you do not exactly know
>how it is used.
We know how it is used -- to create a new type using
the template!
> To conclude, I guess that generally it would be very
>difficult to build the collaboration diagram correctly if
>the template arguments should be followed.
Agreed. May be this is an NP-Hard problem. :)
>On the other hand, the life is not only that much
>scientific. It could probably be useful to include some
>internal knowledge about standard containers into doxygen.
>But then, you have to know whether "vector<something>"
>means _some_ vector or std::vector<>, etc. In other words,
>the parser would be probably more complicated.
Agreed, so I "forgive" Doxygen for not handling the
CASE IV. But, still, what about CASE II.2 and III.2?
>So, the final question is:
>
> "Is the result of a solution of the problem worth of the
> complexity of the solution?"
Probably not... Oh well, life is full of tradeoff's. :)
It has been fun typing this message. Thank you for
your time if you made it this far.
|
|
From: Prikryl,Petr <PRI...@sk...> - 2001-09-14 12:35:05
|
Hi Kris,
I agree that adding some extra command to manually mark the
relation between the classes would be fine. Majority probably
do not need some general solution of that kind. Those who need
to capture the relationship of that special kind would probably
agree to insert it manually. I cannot argue here. I belong to the
majority ;-)
Petr
--
Petr Prikryl, SKIL, spol. s r.o., pri...@sk...
> -----Original Message-----
> From: Kris Thielemans [SMTP:kri...@ic...]
> Sent: Friday, September 14, 2001 12:26 PM
> To: dox...@li...
> Subject: RE: [Doxygen-users] Class collaboration
>
> Dear Petr,
>
> I agree with you. It seems impossible to do this without knowing what
> std::vector is. One could argue this is easy to do, but what about by own
> class Array. Can doxygen know it's also a container class? Too hard.
>
> > > > [...] In the class collaboration diagram that is generated,
> > > > I think something is not quite right. Let me give an example:
> > > >
> > > > class A { /* some methods */ };
> > > > class B { std::vector<A *> vec; };
> >
> > "Is the result of a solution of the problem worth of the
> > complexity of the solution?"
>
> So, I don't think anyone should try to build this in in the parser.
> However,
> it might be useful to have an extra doxygen command (one more!) to force a
> class to be put in the collaboration diagram. That would solve this
> conundrum I guess.
[...]
|
|
From: Kris T. <kri...@ic...> - 2001-09-14 10:29:16
|
Dear Petr,
I agree with you. It seems impossible to do this without knowing what
std::vector is. One could argue this is easy to do, but what about by own
class Array. Can doxygen know it's also a container class? Too hard.
> > > [...] In the class collaboration diagram that is generated,
> > > I think something is not quite right. Let me give an example:
> > >
> > > class A { /* some methods */ };
> > > class B { std::vector<A *> vec; };
> > >
>
> "Is the result of a solution of the problem worth of the
> complexity of the solution?"
>
So, I don't think anyone should try to build this in in the parser. However,
it might be useful to have an extra doxygen command (one more!) to force a
class to be put in the collaboration diagram. That would solve this
conundrum I guess.
All the best,
Kris Thielemans
Imaging Research Solutions Ltd
Cyclotron Building
Hammersmith Hospital
Du Cane Road
London W12 ONN, United Kingdom
web site address:
http://www.irsl.org/~kris
|
|
From: Schreib, D. VTC-B. <dir...@vo...> - 2001-09-14 06:38:21
|
> > In the
> > class collaboration diagram that is generated, I think something is
> > not quite right. Let me give an example:
> >
> > class A { /* some methods */ };
> >
> > class B { std::vector<A *> vec; };
> >
> > I'm just using the std::vector as an example. It can
> be any kind of
> > (STL) container. Even though this strongly suggests that class B
> > somehow uses class A for "something" (in my case, B *does*
> make use of
> > A, which is why B stores a vector of pointers to A),
> Doxygen does not
> > conclude that there is collaboration between A and B. This can be
> > extended to include the use of smart pointers stored in a container.
> >
> > I'm interested to know if this is the intended
> behaviour. If so,
> > what is the reason behind? If not, maybe this is a bug?
>
> Currently this is intended behaviour, but I would like to
> hear what other
> people think about this. Should template arguments, such as
> in the example
> above, be visualised in collaboration diagrams? and if so,
> how? Does UML cover these kind of relations?
Take a look at Together C++ / Control Center. This tool visualizes
it as an one-to-many relationship from B to A. (and an aggregation,
if you remove the pointer).
Dirk
---------------------------------------------------------
This Mail has been checked for Viruses
Attention: Encrypted mails can NOT be checked!
**
Diese Mail wurde auf Viren geprueft
Hinweis: Verschluesselte mails koennen NICHT auf Viren geprueft werden!
---------------------------------------------------------
|
|
From: Prikryl,Petr <PRI...@sk...> - 2001-09-14 06:06:53
|
Dimitri wrote:
> Anthony Yuen wrote:
> >
> > [...] In the class collaboration diagram that is generated,
> > I think something is not quite right. Let me give an example:
> >
> > class A { /* some methods */ };
> > class B { std::vector<A *> vec; };
> >
> > [...] I'm interested to know if this is the intended behaviour. If
> > so, what is the reason behind? If not, maybe this is a bug?
>
> Currently this is intended behaviour, but I would like
> to hear what other people think about this. Should
> template arguments, such as in the example above, be
> visualised in collaboration diagrams? and if so, how?
> [...]
Shortly, I think that this behaviour is correct.
No so shortly, I feel that it is more philosophic problem
than the technical one (I may be wrong). So I would
reformulate the question:
"Should only direct relations be considered in the
collaboration diagram?"
If the answer is no, then main() (for example) is a
function that is indirectly related to almost everything
in the program -- except the part hidden in
implementation parts (.c, .cpp). If I use here some
object of the class that hides inside the whole
functionality of the application, then the collaboration graph
of that class would be very complex and it would contain almost
every class of the application. (Well, this is rather
simplified, but I hope you understand the point.)
If the above were accepted, then the only reasonable
solution would be to define the maximum level of indirect
relations. Say, 1 (one) is the level when we think only
about direct relations.
Now, std::vector<A> is a vector of instances of class A.
The mentioned example of std::vector<A *> is vector of
pointers to such instances. Even when you know how
std::vector<whatever> may look like inside---from the abstract
point of view---you should agree that the "whatever" is hidden
inside something lager. If "vec" is the object of that class, then
"whatever" is somehow hidden inside. So, I would mark
the level of collaboration between B and "whatever" using
at least value 2. Moreover, if the "whatever" is a
pointer to "something-else", I would mark the level of
collaboration between B and "something-else" using at
least the value 3.
Even more serious problem is that the argument of any
template is used textually inside the body of the
template. This also means that you do not exactly know
how it is used.
To conclude, I guess that generally it would be very
difficult to build the collaboration diagram correctly if
the template arguments should be followed.
On the other hand, the life is not only that much
scientific. It could probably be useful to include some
internal knowledge about standard containers into doxygen.
But then, you have to know whether "vector<something>"
means _some_ vector or std::vector<>, etc. In other words,
the parser would be probably more complicated.
So, the final question is:
"Is the result of a solution of the problem worth of the
complexity of the solution?"
With regards,
Petr
--
Petr Prikryl, SKIL, spol. s r.o., pri...@sk...
|
|
From: Steve W. <ste...@ag...> - 2001-09-14 05:29:36
|
Hi All, Sorry for the overly simple question but having read through the doco I cannot under stand why I get the following error messages: Generating docs for file wdog.c... Generating docs for file wdog.h... c:/data/stevew/doxygen/wdog/wdog.h,135,Warning: Member wdCreate of file wdog.h is not documented. c:/data/stevew/doxygen/wdog/wdog.h,146,Warning: Member wdDelete of file wdog.h is not documented. c:/data/stevew/doxygen/wdog/wdog.h,156,Warning: Member wdStart of file wdog.h is not documented. c:/data/stevew/doxygen/wdog/wdog.h,167,Warning: Member wdStop of file wdog.h isnot documented. Generating docs for file wdog2.c... Generating docs for file wdog2.h... c:/data/stevew/doxygen/wdog/wdog2.h,34,Warning: Member wdShow of file wdog2.h is not documented. The wdog.h file is as follows: /*! \fn int wdCreate(int wd_id) \brief Creates a new instance of a Watch Dog Timer \param wd_id A user designated ID for the Watch Dog Timer to be created */ int wdCreate(int wd_id); /*! \fn int wdDelete(int wd_id) \brief Deletes a Watch Dog Timer \param wd_id The user assigned ID for the Watch Dog Timer */ int wdDelete(int wd_id); etc..... What have I missed, such that I get the warnings above ? Regards, Steve Walker. |
|
From: Jeff G. <je...@cr...> - 2001-09-13 19:29:00
|
> Currently this is intended behaviour, but I would like to hear what other > people think about this. Should template arguments, such as in the example > above, be visualised in collaboration diagrams? and if so, how? Does UML > cover these kind of relations? The case of std::vector<ValueType> seems reasonable, but std::map<KeyType, ValueType> would be tricky in my mind. I wouldn't think that we would want the KeyType in the collaboration diagram although that class is certainly used. Jeff |
|
From: Dimitri v. H. <di...@st...> - 2001-09-13 18:52:04
|
On Thu, Sep 13, 2001 at 12:51:43PM -0300, Anthony Yuen wrote:
>
> Hi, I found another "problem" that "bugs" me (pun intended!).
> In the class collaboration diagram that is generated, I think something
> is not quite right. Let me give an example:
>
> class A { /* some methods */ };
>
> class B { std::vector<A *> vec; };
>
> I'm just using the std::vector as an example. It can be any
> kind of (STL) container. Even though this strongly suggests that
> class B somehow uses class A for "something" (in my case, B *does*
> make use of A, which is why B stores a vector of pointers to A),
> Doxygen does not conclude that there is collaboration between A and B.
> This can be extended to include the use of smart pointers stored
> in a container.
>
> I'm interested to know if this is the intended behaviour. If
> so, what is the reason behind? If not, maybe this is a bug?
Currently this is intended behaviour, but I would like to hear what other
people think about this. Should template arguments, such as in the example
above, be visualised in collaboration diagrams? and if so, how? Does UML
cover these kind of relations?
Regards,
Dimitri
|
|
From: Anthony Y. <an...@ac...> - 2001-09-13 15:50:12
|
Hi, I found another "problem" that "bugs" me (pun intended!).
In the class collaboration diagram that is generated, I think something
is not quite right. Let me give an example:
class A { /* some methods */ };
class B { std::vector<A *> vec; };
I'm just using the std::vector as an example. It can be any
kind of (STL) container. Even though this strongly suggests that
class B somehow uses class A for "something" (in my case, B *does*
make use of A, which is why B stores a vector of pointers to A),
Doxygen does not conclude that there is collaboration between A and B.
This can be extended to include the use of smart pointers stored
in a container.
I'm interested to know if this is the intended behaviour. If
so, what is the reason behind? If not, maybe this is a bug?
Thanks for your time.
|
|
From: Anthony Y. <an...@ac...> - 2001-09-13 13:32:43
|
Thanks for your response. Yes, that's exactly what I'd like to do. I know about the option SORT_MEMBER_DOCS but it only sorts the detailed descriptions, *NOT* the brief descriptions, where the names are separated by different access modifiers. I was wondering if they can be sorted alphabetically as well. Right now, even if the SORT_MEMBER_DOCS is YES, the brief descriptions appear in the order in which the functions are declared in the header, *NOT* sorted... It would be nice to have an option for sorting them. -----Original Message----- From: dox...@li... [mailto:dox...@li...] On Behalf Of Prikryl,Petr Sent: Thursday, 13 September, 2001 03:35 To: Anthony Yuen; dox...@li... Subject: RE: [Doxygen-users] Sorting member functions (bug?) Try "doxygen -g" to generate Doxyfile with comments. Then look for SORT_MEMBER_DOCS. You can find the following: # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES It works for me concerning the detailed descriptions. On the other hand, the list of methods with brief descriptions (in the first part of a documentation page for a class) is not sorted. I guess that it can be a bug. Or is it intentional? Thanks, Petr -- Petr Prikryl, SKIL, spol. s r.o., pri...@sk... |
|
From: Moshe K. <Kr...@Pa...> - 2001-09-13 11:38:29
|
I cannot seem to make \c and % work together in any combination: that is to render a work in fixed-proportion font and disable the link. Anyone encountered this problem and found a solution? <tt></tt> works for the fixed-proportion font part, but of course it's a shlepp and makes the code more heavy and illegible than it is anyhow. Moshe Kruger Paradigm Geophysical |
|
From: Raimund K. <rk...@or...> - 2001-09-13 08:24:15
|
Hi Dimitri and all,
I havbe found one and, well, I guess a half, bugs with simple member
groups. One apparently is related to not using the \name command (that's
the half), the other one is a relatively serious LaTeX error.
I'll start with the latter, since there seems to be no good workaround
for this one.
Let's say I have a class Test coded and documented like this:
class Test
{
public :
/** Brief group description.
*
* Second paragraph of group description.
*
* \name something
*/
/*@{*/
int a;
int b;
/*@}*/
};
"a" and "b" are grouped together in the group "something", but the
"Public Attributes" part of the generated LaTeX file looks like this:
\subsection*{Public Attributes}
\begin{CompactItemize}
\end{CompactItemize}
\begin{Indent}{\bf something}\par
{\em Brief group description.
Second paragraph of group description.}\begin{CompactItemize}
\item
int {\bf a}
\item
int {\bf b}
\end{CompactItemize}
\end{Indent}
This generates a LaTeX error, because the CompactItemize environment in
lines 2 and 3 is empty. In general, LaTeX does not allow list
environments without a single \item.
The other problem arises when I don't include a \name command - this
actually is the case in several places of the project I am currently
working on: Some members are related to each other and therefore should
be grouped together; however, a group name seems superfluous. The result
is about the same in HTML and LaTeX output: The group structure appears
to get lost as well as the second documentation paragraph. Additionally,
the group description is not associated to "a" and "b", but just to "a".
E.g., the LaTeX output looks like this:
\section{Test Class Reference}
\label{classTest}\index{Test@{Test}}
{\tt \#include $<$test.h$>$}
\subsection*{Public Attributes}
\begin{CompactItemize}
\end{CompactItemize}
{\bf }\par
\begin{CompactItemize}
\item
int {\bf a}
\begin{CompactList}\small\item\em Brief group
description.\item\end{CompactList}\item
int {\bf b}
\end{CompactItemize}
\subsection{Member Data Documentation}
\index{Test@{Test}!a@{a}}
\index{a@{a}!Test@{Test}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int
Test::a}\label{classTest_m0}
Brief group description.
Definition at line 9 of file test.h.\index{Test@{Test}!b@{b}}
\index{b@{b}!Test@{Test}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int
Test::b}\label{classTest_m1}
Definition at line 10 of file test.h.
The documentation for this class was generated from the following
file:\begin{CompactItemize}
\item
{\bf test.h}\end{CompactItemize}
Just to make sure: I am using the latest CVS checkout.
Regards,
--
Raimund Klein <kl...@or...>
Orthogon GmbH, Hastedter Osterdeich 222, D-28207 Bremen
|
|
From: Prikryl,Petr <PRI...@sk...> - 2001-09-13 06:41:05
|
Try "doxygen -g" to generate Doxyfile with comments. Then look for SORT_MEMBER_DOCS. You can find the following: # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES It works for me concerning the detailed descriptions. On the other hand, the list of methods with brief descriptions (in the first part of a documentation page for a class) is not sorted. I guess that it can be a bug. Or is it intentional? Thanks, Petr -- Petr Prikryl, SKIL, spol. s r.o., pri...@sk... > -----Original Message----- > From: Anthony Yuen [SMTP:an...@ac...] > Sent: Thursday, September 13, 2001 5:38 AM > To: dox...@li... > Subject: [Doxygen-users] Sorting member functions > > > Hi, I just started using Doxygen, please bear with me. I'd like > to have the member functions of my C++ classes to be sorted > alphabetically, > section by section (i.e. public, protected, private are separately > sorted). Is > there such an option in Doxygen? I'm using 1.2.10. Thanks for your help. > > |
|
From: Anthony Y. <an...@ac...> - 2001-09-13 03:37:24
|
Hi, I just started using Doxygen, please bear with me. I'd like to have the member functions of my C++ classes to be sorted alphabetically, section by section (i.e. public, protected, private are separately sorted). Is there such an option in Doxygen? I'm using 1.2.10. Thanks for your help. |
|
From: <dr...@ca...> - 2001-09-12 19:34:05
|
Does anyone know why the # command to generate a link doesn't work under
\retval?
example :
#define I_WILL_GET_LINKED 0
#define I_WONT_GET_LINKED 1
/*!
#I_WILL_GET_LINKED
\param myParam1
the following will be a generated link #I_WILL_GET_LINKED
\retval #I_WONT_GET_LINKED
an error occured
\retval #I_WONT_GET_LINKED
This link wont get generated
*/
Dimitri, could you fix this please?
Thx.
|
|
From: Rob D. <rd...@ce...> - 2001-09-12 18:44:58
|
I am having problems with the HTML output generated from the code below.
Using doxygen-1.2.10 on WIN2000 the first typedef (allocFunc) comes out ok
but the second typedef(freeFunc) is mistakenly documented as a function.
If I remove CALLCONV from the typedefs then the output is ok.
This is a simplified example where CALLCONV is always __cdecl but in my real
project
CALLCONV will vary depending on the platform.
/** @file file.h */
/** @def CALLCONV __cdecl
*/
#define CALLCONV __cdecl
/** @typedef void* (CALLCONV *allocFunc )( int size, void * const memRef );
Prototype for the callback function which allocates memory.
Notes:
@param size [Input] Number of bytes to allocate.
@param memRef [Input] User reference parameter.
@return pointer to allocated memory
*/
typedef void* (CALLCONV *allocFunc )(
int size,
void * const memRef
);
/** @typedef void* ( CALLCONV *freeFunc )( void *block, void * const memRef );
Prototype for the callback function which frees memory.
Notes:
@param block [Input/Output] Block to free.
@param memRef [Input] User reference parameter.
@return nothing
*/
typedef void (CALLCONV *freeFunc )(
void *block,
void * const memRef
);
/** @struct MemCallbacks
* Structure for memory callbacks
*/
struct MemCallbacks
{
/** memory allocation callback */
allocFunc malloc;
/** memory de-allocation callback */
freeFunc free;
/** reference for memory callbacks */
void * memRef;
} MemCallbacks;
/** @typedef struct MemCallbacks MemCallbacks
* Structure for application callbacks
*/
typedef struct MemCallbacks MemCallbacks;
|
|
From: root <bob...@bo...> - 2001-09-12 15:53:14
|
I tried to post this a few days ago, but did not see it on the mail list. Forgive me if this is a repeat post for everyoe else. My project includes a shell like command line processor with commands in the ususal unix command line format. eg. command -a -bvalue I'd like to document them using doxygen and incorporate them into the rest of my docs. I have two questions. Are there any options available for assisting in documenting such commands something like the following /*! \page command.html command description \command command -a -bvalue \param -a Does whatever -a does \param -bvalue Does whatever -b value does Long Description of command \sa othercommand, yetanothercommand */ Secondly if I want a section to describe all these commands, one command per page, I can create each page with the \page command but then each commands page shows up in the related docs section. I'd prefer only the top level page giving an overview fo the commands and links to the other pages to appear there. Is this possible. Thanks Bob S. ------------------------------------------------------- |
|
From: Roberto B. <ba...@cs...> - 2001-09-11 10:20:45
|
Luigi Ballabio wrote:
>
> Hi all (and especially Dimitri),
> lately I have been writing a few general sections in my
> documentation---"general" meaning an overview of the problem addressed by
> the code as opposed to "non general" being the documentation of a single
> method/class---and I thought that it would be nice to have a command for
> references.
>
> It could work like:
> /*! \page etc.
> ...
> As pointed out in
> \cite (some_label?)
> Doe J., "Gnats and Gnus", Journal of This and That 12, 2001
> \endcite
> gnats can be nastier than gnus at times.
> ...
> */
>
> This would cause the above block to appear in the documentation as
>
> As pointed out in [1], gnats can be nastier than gnus at times.
>
> while a separate page (the list of references) would contain among others
>
> [1] Doe J., "Gnats and Gnus", Journal of This and That 12, 2001.
>
> The [1] in the documentation would be a link to the appropriate entry in
> the list of references.
>
> Would it be at least moderately easy to implement? Could it use BibTeX for
> LaTeX output? Does anyone like the idea? Suggestions? Rejections?
I think that this is a great idea and a feature (BibTeX support included)
that I would love to have.
All the best,
Roberto
--
Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:ba...@cs...
|
|
From: Christian H. <ch...@po...> - 2001-09-11 09:56:48
|
Attached is an updated XML bug fix patch. With these changes, I am now able to generate XML-compliant documentation for both my small test cases and my large applications and libraries. Previously, the tags being generated were not balanced, and thus could not be parsed by any XML parsers. It shouldn't have disturbed any of the other doc generators, but I haven't tested them all with this to be sure. -- Christian Hammond <> The GNUpdate Project ch...@po... <> http://www.gnupdate.org/ |
|
From: John S. <joh...@se...> - 2001-09-11 08:28:04
|
Hi all, Can anybody enlighten me as to what the \refitem keyword officially does? Can't find a description for it in the doc, though the source for the doc (commands.doc, config.doc) use it extensively. Also, whilst playing around with config.doc, I've noticed that \refitem FOO FOO produces an empty list item. Bug? Cheers, John |