Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
744d1ca5
Commit
744d1ca5
authored
Dec 29, 2013
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More work on the template and context mechanisms
parent
2912829c
Changes
14
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1284 additions
and
306 deletions
+1284
-306
classdef.cpp
src/classdef.cpp
+13
-9
classdef.h
src/classdef.h
+6
-2
context.cpp
src/context.cpp
+832
-96
context.h
src/context.h
+41
-1
filedef.cpp
src/filedef.cpp
+15
-5
filedef.h
src/filedef.h
+4
-0
memberdef.cpp
src/memberdef.cpp
+18
-9
memberdef.h
src/memberdef.h
+2
-1
message.cpp
src/message.cpp
+7
-2
message.h
src/message.h
+2
-0
namespacedef.cpp
src/namespacedef.cpp
+33
-23
namespacedef.h
src/namespacedef.h
+1
-0
template.cpp
src/template.cpp
+264
-124
template.h
src/template.h
+46
-34
No files found.
src/classdef.cpp
View file @
744d1ca5
...
@@ -1767,20 +1767,24 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
...
@@ -1767,20 +1767,24 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
}
}
}
}
bool
ClassDef
::
visibleInParentsDeclList
()
const
{
static
bool
extractPrivate
=
Config_getBool
(
"EXTRACT_PRIVATE"
);
static
bool
hideUndocClasses
=
Config_getBool
(
"HIDE_UNDOC_CLASSES"
);
static
bool
extractLocalClasses
=
Config_getBool
(
"EXTRACT_LOCAL_CLASSES"
);
bool
linkable
=
isLinkable
();
return
(
name
().
find
(
'@'
)
==-
1
&&
!
isExtension
()
&&
(
protection
()
!=::
Private
||
extractPrivate
)
&&
(
linkable
||
(
!
hideUndocClasses
&&
(
!
isLocal
()
||
extractLocalClasses
)))
);
}
void
ClassDef
::
writeDeclarationLink
(
OutputList
&
ol
,
bool
&
found
,
const
char
*
header
,
bool
localNames
)
void
ClassDef
::
writeDeclarationLink
(
OutputList
&
ol
,
bool
&
found
,
const
char
*
header
,
bool
localNames
)
{
{
//static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
//static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
//static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
//static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
static
bool
hideUndocClasses
=
Config_getBool
(
"HIDE_UNDOC_CLASSES"
);
static
bool
extractLocalClasses
=
Config_getBool
(
"EXTRACT_LOCAL_CLASSES"
);
bool
isLink
=
isLinkable
();
SrcLangExt
lang
=
getLanguage
();
SrcLangExt
lang
=
getLanguage
();
if
(
isLink
||
if
(
visibleInParentsDeclList
())
(
!
hideUndocClasses
&&
(
!
isLocal
()
||
extractLocalClasses
)
)
)
{
{
if
(
!
found
)
// first class
if
(
!
found
)
// first class
{
{
...
@@ -1820,7 +1824,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
...
@@ -1820,7 +1824,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
ol
.
writeString
(
" "
);
ol
.
writeString
(
" "
);
ol
.
insertMemberAlign
();
ol
.
insertMemberAlign
();
}
}
if
(
isLink
)
if
(
isLink
able
()
)
{
{
ol
.
writeObjectLink
(
getReference
(),
ol
.
writeObjectLink
(
getReference
(),
getOutputFileBase
(),
getOutputFileBase
(),
...
...
src/classdef.h
View file @
744d1ca5
...
@@ -168,6 +168,9 @@ class ClassDef : public Definition
...
@@ -168,6 +168,9 @@ class ClassDef : public Definition
/** the class is visible in a class diagram, or class hierarchy */
/** the class is visible in a class diagram, or class hierarchy */
bool
isVisibleInHierarchy
();
bool
isVisibleInHierarchy
();
/** show this class in the declaration section of its parent? */
bool
visibleInParentsDeclList
()
const
;
/** Returns the template arguments of this class
/** Returns the template arguments of this class
* Will return 0 if not applicable.
* Will return 0 if not applicable.
*/
*/
...
@@ -310,14 +313,13 @@ class ClassDef : public Definition
...
@@ -310,14 +313,13 @@ class ClassDef : public Definition
QCString
generatedFromFiles
()
const
;
QCString
generatedFromFiles
()
const
;
const
FileList
&
usedFiles
()
const
;
const
FileList
&
usedFiles
()
const
;
QCString
includeStatement
()
const
;
const
ArgumentList
*
typeConstraints
()
const
;
const
ArgumentList
*
typeConstraints
()
const
;
const
ExampleSDict
*
exampleList
()
const
;
const
ExampleSDict
*
exampleList
()
const
;
bool
hasExamples
()
const
;
bool
hasExamples
()
const
;
QCString
getMemberListFileName
()
const
;
QCString
getMemberListFileName
()
const
;
bool
subGrouping
()
const
;
bool
subGrouping
()
const
;
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
// --- setters ----
// --- setters ----
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
...
@@ -432,6 +434,8 @@ class ClassDef : public Definition
...
@@ -432,6 +434,8 @@ class ClassDef : public Definition
QPtrDict
<
void
>
*
visitedClasses
);
QPtrDict
<
void
>
*
visitedClasses
);
void
getTitleForMemberListType
(
MemberListType
type
,
void
getTitleForMemberListType
(
MemberListType
type
,
QCString
&
title
,
QCString
&
subtitle
);
QCString
&
title
,
QCString
&
subtitle
);
QCString
includeStatement
()
const
;
ClassDefImpl
*
m_impl
;
ClassDefImpl
*
m_impl
;
...
...
src/context.cpp
View file @
744d1ca5
This diff is collapsed.
Click to expand it.
src/context.h
View file @
744d1ca5
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
#include "types.h"
#include "types.h"
#include "template.h"
#include "template.h"
#include <qlist.h>
class
Definition
;
class
Definition
;
class
ClassDef
;
class
ClassDef
;
...
@@ -108,7 +109,7 @@ class UsedFilesContext : public TemplateListIntf
...
@@ -108,7 +109,7 @@ class UsedFilesContext : public TemplateListIntf
class
IncludeInfoContext
:
public
TemplateStructIntf
class
IncludeInfoContext
:
public
TemplateStructIntf
{
{
public
:
public
:
IncludeInfoContext
(
IncludeInfo
*
,
SrcLangExt
lang
);
IncludeInfoContext
(
const
IncludeInfo
*
,
SrcLangExt
lang
);
~
IncludeInfoContext
();
~
IncludeInfoContext
();
// TemplateStructIntf methods
// TemplateStructIntf methods
...
@@ -119,6 +120,25 @@ class IncludeInfoContext : public TemplateStructIntf
...
@@ -119,6 +120,25 @@ class IncludeInfoContext : public TemplateStructIntf
Private
*
p
;
Private
*
p
;
};
};
//----------------------------------------------------
class
IncludeInfoListContext
:
public
TemplateListIntf
{
public
:
IncludeInfoListContext
(
const
QList
<
IncludeInfo
>
&
list
,
SrcLangExt
lang
);
~
IncludeInfoListContext
();
// TemplateListIntf
virtual
int
count
()
const
;
virtual
TemplateVariant
at
(
int
index
)
const
;
virtual
TemplateListIntf
::
ConstIterator
*
createIterator
()
const
;
private
:
class
Private
;
Private
*
p
;
};
//----------------------------------------------------
//----------------------------------------------------
class
ClassContext
:
public
TemplateStructIntf
class
ClassContext
:
public
TemplateStructIntf
...
@@ -254,6 +274,26 @@ class NestedClassListContext : public TemplateListIntf
...
@@ -254,6 +274,26 @@ class NestedClassListContext : public TemplateListIntf
//----------------------------------------------------
//----------------------------------------------------
class
NestedNamespaceListContext
:
public
TemplateListIntf
{
public
:
NestedNamespaceListContext
();
~
NestedNamespaceListContext
();
// TemplateListIntf
virtual
int
count
()
const
;
virtual
TemplateVariant
at
(
int
index
)
const
;
virtual
TemplateListIntf
::
ConstIterator
*
createIterator
()
const
;
void
append
(
NamespaceDef
*
cd
);
private
:
class
Private
;
Private
*
p
;
};
//----------------------------------------------------
class
ClassListContext
:
public
TemplateListIntf
class
ClassListContext
:
public
TemplateListIntf
{
{
public
:
public
:
...
...
src/filedef.cpp
View file @
744d1ca5
...
@@ -170,12 +170,18 @@ void FileDef::findSectionsInDocumentation()
...
@@ -170,12 +170,18 @@ void FileDef::findSectionsInDocumentation()
}
}
}
}
void
FileDef
::
writeDetailedDescription
(
OutputList
&
ol
,
const
QCString
&
title
)
bool
FileDef
::
hasDetailedDescription
()
const
{
{
if
((
!
briefDescription
().
isEmpty
()
&&
Config_getBool
(
"REPEAT_BRIEF"
))
||
static
bool
sourceBrowser
=
Config_getBool
(
"SOURCE_BROWSER"
);
return
((
!
briefDescription
().
isEmpty
()
&&
Config_getBool
(
"REPEAT_BRIEF"
))
||
!
documentation
().
stripWhiteSpace
().
isEmpty
()
||
// avail empty section
!
documentation
().
stripWhiteSpace
().
isEmpty
()
||
// avail empty section
(
Config_getBool
(
"SOURCE_BROWSER"
)
&&
getStartBodyLine
()
!=-
1
&&
getBodyDef
())
(
sourceBrowser
&&
getStartBodyLine
()
!=-
1
&&
getBodyDef
())
)
);
}
void
FileDef
::
writeDetailedDescription
(
OutputList
&
ol
,
const
QCString
&
title
)
{
if
(
hasDetailedDescription
())
{
{
ol
.
pushGeneratorState
();
ol
.
pushGeneratorState
();
ol
.
disable
(
OutputGenerator
::
Html
);
ol
.
disable
(
OutputGenerator
::
Html
);
...
@@ -379,7 +385,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
...
@@ -379,7 +385,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
{
{
warn_uncond
(
"Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.
\n
"
,
name
().
data
());
warn_uncond
(
"Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.
\n
"
,
name
().
data
());
}
}
if
(
!
incDepGraph
.
isTrivial
())
else
if
(
!
incDepGraph
.
isTrivial
())
{
{
ol
.
startTextBlock
();
ol
.
startTextBlock
();
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
disable
(
OutputGenerator
::
Man
);
...
@@ -1800,3 +1806,7 @@ QCString FileDef::title() const
...
@@ -1800,3 +1806,7 @@ QCString FileDef::title() const
return
theTranslator
->
trFileReference
(
name
());
return
theTranslator
->
trFileReference
(
name
());
}
}
QCString
FileDef
::
fileVersion
()
const
{
return
m_fileVersion
;
}
src/filedef.h
View file @
744d1ca5
...
@@ -133,6 +133,10 @@ class FileDef : public Definition
...
@@ -133,6 +133,10 @@ class FileDef : public Definition
ClassSDict
*
getClassSDict
()
const
{
return
m_classSDict
;
}
ClassSDict
*
getClassSDict
()
const
{
return
m_classSDict
;
}
QCString
title
()
const
;
QCString
title
()
const
;
bool
hasDetailedDescription
()
const
;
QCString
fileVersion
()
const
;
bool
subGrouping
()
const
{
return
m_subGrouping
;
}
//---------------------------------
//---------------------------------
...
...
src/memberdef.cpp
View file @
744d1ca5
...
@@ -3036,6 +3036,18 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
...
@@ -3036,6 +3036,18 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
}
}
#endif
#endif
QCString
MemberDef
::
fieldType
()
const
{
QCString
type
=
m_impl
->
accessorType
;
if
(
type
.
isEmpty
())
{
type
=
m_impl
->
type
;
}
if
(
isTypedef
())
type
.
prepend
(
"typedef "
);
return
simplifyTypeForTable
(
type
);
}
void
MemberDef
::
writeMemberDocSimple
(
OutputList
&
ol
,
Definition
*
container
)
void
MemberDef
::
writeMemberDocSimple
(
OutputList
&
ol
,
Definition
*
container
)
{
{
Definition
*
scope
=
getOuterScope
();
Definition
*
scope
=
getOuterScope
();
...
@@ -3056,15 +3068,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
...
@@ -3056,15 +3068,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
ol
.
startInlineMemberType
();
ol
.
startInlineMemberType
();
ol
.
startDoxyAnchor
(
cfname
,
cname
,
memAnchor
,
doxyName
,
doxyArgs
);
ol
.
startDoxyAnchor
(
cfname
,
cname
,
memAnchor
,
doxyName
,
doxyArgs
);
QCString
type
=
m_impl
->
accessorType
;
QCString
ts
=
fieldType
();
if
(
type
.
isEmpty
())
{
type
=
m_impl
->
type
;
}
if
(
isTypedef
())
type
.
prepend
(
"typedef "
);
QCString
ts
=
simplifyTypeForTable
(
type
);
if
(
cd
)
// cd points to an anonymous struct pointed to by this member
if
(
cd
)
// cd points to an anonymous struct pointed to by this member
// so we add a link to it from the type column.
// so we add a link to it from the type column.
...
@@ -3855,6 +3859,11 @@ void MemberDef::setAccessorType(ClassDef *cd,const char *t)
...
@@ -3855,6 +3859,11 @@ void MemberDef::setAccessorType(ClassDef *cd,const char *t)
m_impl
->
accessorType
=
t
;
m_impl
->
accessorType
=
t
;
}
}
ClassDef
*
MemberDef
::
accessorClass
()
const
{
return
m_impl
->
accessorClass
;
}
void
MemberDef
::
findSectionsInDocumentation
()
void
MemberDef
::
findSectionsInDocumentation
()
{
{
docFindSections
(
documentation
(),
this
,
0
,
docFile
());
docFindSections
(
documentation
(),
this
,
0
,
docFile
());
...
...
src/memberdef.h
View file @
744d1ca5
...
@@ -81,6 +81,7 @@ class MemberDef : public Definition
...
@@ -81,6 +81,7 @@ class MemberDef : public Definition
ClassDef
*
getClassDef
()
const
;
ClassDef
*
getClassDef
()
const
;
FileDef
*
getFileDef
()
const
;
FileDef
*
getFileDef
()
const
;
NamespaceDef
*
getNamespaceDef
()
const
;
NamespaceDef
*
getNamespaceDef
()
const
;
ClassDef
*
accessorClass
()
const
;
// grabbing the property read/write accessor names
// grabbing the property read/write accessor names
const
char
*
getReadAccessor
()
const
;
const
char
*
getReadAccessor
()
const
;
...
@@ -251,7 +252,7 @@ class MemberDef : public Definition
...
@@ -251,7 +252,7 @@ class MemberDef : public Definition
// overrules
// overrules
QCString
documentation
()
const
;
QCString
documentation
()
const
;
QCString
briefDescription
(
bool
abbr
=
FALSE
)
const
;
QCString
briefDescription
(
bool
abbr
=
FALSE
)
const
;
QCString
fieldType
()
const
;
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
...
...
src/message.cpp
View file @
744d1ca5
...
@@ -13,7 +13,6 @@
...
@@ -13,7 +13,6 @@
*
*
*/
*/
#include <stdarg.h>
#include <stdio.h>
#include <stdio.h>
#include <qdatetime.h>
#include <qdatetime.h>
#include "config.h"
#include "config.h"
...
@@ -22,6 +21,7 @@
...
@@ -22,6 +21,7 @@
#include "doxygen.h"
#include "doxygen.h"
#include "portable.h"
#include "portable.h"
#include "filedef.h"
#include "filedef.h"
#include "message.h"
static
QCString
outputFormat
;
static
QCString
outputFormat
;
static
const
char
*
warning_str
=
"warning: "
;
static
const
char
*
warning_str
=
"warning: "
;
...
@@ -172,6 +172,11 @@ void warn(const char *file,int line,const char *fmt, ...)
...
@@ -172,6 +172,11 @@ void warn(const char *file,int line,const char *fmt, ...)
va_end
(
args
);
va_end
(
args
);
}
}
void
warn
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
va_list
args
)
{
do_warn
(
"WARNINGS"
,
file
,
line
,
warning_str
,
fmt
,
args
);
}
void
warn_simple
(
const
char
*
file
,
int
line
,
const
char
*
text
)
void
warn_simple
(
const
char
*
file
,
int
line
,
const
char
*
text
)
{
{
if
(
!
Config_getBool
(
"WARNINGS"
))
return
;
// warning type disabled
if
(
!
Config_getBool
(
"WARNINGS"
))
return
;
// warning type disabled
...
...
src/message.h
View file @
744d1ca5
...
@@ -19,9 +19,11 @@
...
@@ -19,9 +19,11 @@
#define MESSAGE_H
#define MESSAGE_H
#include <stdio.h>
#include <stdio.h>
#include <stdarg.h>
extern
void
msg
(
const
char
*
fmt
,
...);
extern
void
msg
(
const
char
*
fmt
,
...);
extern
void
warn
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
warn
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
warn
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
va_list
args
);
extern
void
warn_simple
(
const
char
*
file
,
int
line
,
const
char
*
text
);
extern
void
warn_simple
(
const
char
*
file
,
int
line
,
const
char
*
text
);
extern
void
warn_undoc
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
warn_undoc
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
warn_doc_error
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
warn_doc_error
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
...
...
src/namespacedef.cpp
View file @
744d1ca5
...
@@ -916,29 +916,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
...
@@ -916,29 +916,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
continue
;
// will be output in another pass, see layout_default.xml
continue
;
// will be output in another pass, see layout_default.xml
ol
.
startMemberDeclaration
();
ol
.
startMemberDeclaration
();
ol
.
startMemberItem
(
nd
->
getOutputFileBase
(),
0
);
ol
.
startMemberItem
(
nd
->
getOutputFileBase
(),
0
);
if
(
lang
==
SrcLangExt_Java
||
lang
==
SrcLangExt_CSharp
)
QCString
ct
=
nd
->
compoundTypeString
();
{
ol
.
docify
(
ct
);
ol
.
docify
(
"package "
);
ol
.
docify
(
" "
);
}
else
if
(
lang
==
SrcLangExt_Fortran
)
{
ol
.
docify
(
"module "
);
}
else
if
(
lang
==
SrcLangExt_IDL
)
{
if
(
nd
->
isModule
())
{
ol
.
docify
(
"module "
);
}
else
if
(
nd
->
isConstantGroup
())
{
ol
.
docify
(
"constants"
);
}
else
{
err
(
"Internal inconsistency: namespace in IDL not module or cg
\n
"
);
}
}
ol
.
insertMemberAlign
();
ol
.
insertMemberAlign
();
QCString
name
;
QCString
name
;
if
(
localName
)
if
(
localName
)
...
@@ -1103,3 +1083,33 @@ QCString NamespaceDef::title() const
...
@@ -1103,3 +1083,33 @@ QCString NamespaceDef::title() const
}
}
return
pageTitle
;
return
pageTitle
;
}
}
QCString
NamespaceDef
::
compoundTypeString
()
const
{
SrcLangExt
lang
=
getLanguage
();
if
(
lang
==
SrcLangExt_Java
||
lang
==
SrcLangExt_CSharp
)
{
return
"package"
;
}
else
if
(
lang
==
SrcLangExt_Fortran
)
{
return
"module"
;
}
else
if
(
lang
==
SrcLangExt_IDL
)
{
if
(
isModule
())
{
return
"module"
;
}
else
if
(
isConstantGroup
())
{
return
"constants"
;
}
else
{
err
(
"Internal inconsistency: namespace in IDL not module or constant group
\n
"
);
}
}
return
""
;
}
src/namespacedef.h
View file @
744d1ca5
...
@@ -94,6 +94,7 @@ class NamespaceDef : public Definition
...
@@ -94,6 +94,7 @@ class NamespaceDef : public Definition
NamespaceSDict
*
getNamespaceSDict
()
const
{
return
namespaceSDict
;
}
NamespaceSDict
*
getNamespaceSDict
()
const
{
return
namespaceSDict
;
}
QCString
title
()
const
;
QCString
title
()
const
;
QCString
compoundTypeString
()
const
;
bool
visited
;
bool
visited
;
...
...
src/template.cpp
View file @
744d1ca5
This diff is collapsed.
Click to expand it.
src/template.h
View file @
744d1ca5
...
@@ -410,7 +410,7 @@ class TemplateContext
...
@@ -410,7 +410,7 @@ class TemplateContext
//------------------------------------------------------------------------
//------------------------------------------------------------------------
/** @brief Abstract interface for a template.
/** @brief Abstract interface for a template.
* @note Must be created
by
TemplateEngine
* @note Must be created
and is deleted by the
TemplateEngine
*/
*/
class
Template
class
Template
{
{
...
@@ -446,11 +446,23 @@ class TemplateEngine
...
@@ -446,11 +446,23 @@ class TemplateEngine
/** Creates a new template whole contents are in a file.
/** Creates a new template whole contents are in a file.
* @param[in] fileName The name of the file containing the
* @param[in] fileName The name of the file containing the
* template data
* template data
* @param[in] fromLine The line number of the statement that triggered the load
* @return the new template, the caller will be the owner.
* @return the new template, the caller will be the owner.
*/
*/
Template
*
loadByName
(
const
QCString
&
fileName
);
Template
*
loadByName
(
const
QCString
&
fileName
,
int
fromLine
);
/** Indicates that template \a t is no longer needed. The engine
* may decide to delete it.
*/
void
unload
(
Template
*
t
);
void
printIncludeContext
(
const
char
*
fileName
,
int
line
)
const
;
private
:
private
:
friend
class
TemplateNodeBlock
;
void
enterBlock
(
const
QCString
&
fileName
,
const
QCString
&
blockName
,
int
line
);
void
leaveBlock
();
class
Private
;
class
Private
;
Private
*
p
;
Private
*
p
;
};
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment