本文整理汇总了C++中Q3CString::insert方法的典型用法代码示例。如果您正苦于以下问题:C++ Q3CString::insert方法的具体用法?C++ Q3CString::insert怎么用?C++ Q3CString::insert使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Q3CString
的用法示例。
在下文中一共展示了Q3CString::insert方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: java
void UmlClass::java(Q3Dict<Q3CString> & prop) {
if (!scanning) {
Q3CString d = (stereotype() == "interface")
? JavaSettings::interfaceDecl()
: JavaSettings::classDecl();
Q3CString * v;
if ((v = prop.find("Java/Final")) != 0) {
if (*v == "TRUE")
set_isJavaFinal(TRUE);
prop.remove("Java/Final");
}
if ((v = prop.find("Java/Strictfp")) != 0) {
if (*v == "TRUE") {
int index;
if ((index = d.find("${public}")) != -1)
d.insert((unsigned) index + 9, "strictfp ");
else if ((index = d.find("${visibility}")) != -1)
d.insert((unsigned) index + 13, "strictfp ");
}
prop.remove("Java/Strictfp");
}
set_JavaDecl(d);
}
}
示例2: addAssign
void UmlClass::addAssign(bool cte)
{
TRACE_FUNCTION;
UmlOperation * op = UmlOperation::create(this, "operator=");
if (op == 0)
UmlCom::trace("can't add assignment contructor");
else {
// add 'source' parameter
UmlParameter param;
param.name = "source";
param.dir = (cte) ? InputDirection : InputOutputDirection;
param.type.type = this;
op->addParameter(0, param);
// set return type, add the parameter profile
UmlTypeSpec t;
t.type = this;
op->set_ReturnType(t);
Q3CString p = (cte) ? "const ${t0} & ${p0}" : "${t0} & ${p0}";
Q3CString s;
int index;
s = op->cppDecl();
if (s.isEmpty())
s = CppSettings::operationDecl();
if ((index = s.find("${(}")) != -1)
s.insert(index + 4, (const char *)p); //[rageek] cast because Q3CString
if ((index = s.find("${type}")) != -1)
s.insert(index + 7, " &");
op->set_CppDecl(s);
s = op->cppDef();
if (s.isEmpty())
s = CppSettings::operationDef();
if ((index = s.find("${(}")) != -1)
s.insert(index + 4, (const char *)p); //[rageek] cast because Q3CString
if ((index = s.find("${type}")) != -1)
s.insert(index + 7, " &");
op->set_CppDef(s);
}
}
示例3: addCopy
void UmlClass::addCopy(bool cte)
{
TRACE_FUNCTION;
UmlOperation * op = UmlOperation::create(this, name());
if (op == 0)
UmlCom::trace("can't add copy contructor");
else {
// to see that it is a copy constructor
op->set_Stereotype("copy");
// add 'source' parameter
UmlParameter param;
param.name = "source";
param.dir = (cte) ? InputDirection : InputOutputDirection;
param.type.type = this;
op->addParameter(0, param);
// add the parameter profile, and
// remove the useless "${type} " mainly to remove the space
Q3CString p = (cte) ? "const ${t0} & ${p0}" : "${t0} & ${p0}";
Q3CString s;
int index;
s = op->cppDecl();
if (s.isEmpty())
s = CppSettings::operationDecl();
if ((index = s.find("${(}")) != -1)
s.insert(index + 4, (const char *)p); //[rageek] cast because Q3CString
if ((index = s.find("${type} ")) != -1)
s.remove(index, 8);
op->set_CppDecl(s);
s = op->cppDef();
if (s.isEmpty())
s = CppSettings::operationDef();
if ((index = s.find("${(}")) != -1)
s.insert(index + 4, (const char *)p); //[rageek] cast because Q3CString
if ((index = s.find("${type} ")) != -1)
s.remove(index, 8);
op->set_CppDef(s);
}
}
示例4: add_includes
void UmlArtifact::add_includes(const char * i, bool h) {
if (h) {
Q3CString s = cppHeader();
s.insert(s.find("${includes}"), i);
set_CppHeader(s);
}
else {
Q3CString s = cppSource();
s.insert(s.find("${includes}"), i);
set_CppSource(s);
}
}
示例5: manage_docstring
void UmlItem::manage_docstring(const char *& p, const char *& pp, BooL & indent_needed,
Q3CString & indent, Q3CString & saved_indent)
{
static Q3CString the_comment;
p += 12;
the_comment = description();
if ((pp != 0) || // comment contains ${description} !
the_comment.isEmpty())
return;
int index = 0;
while ((index = the_comment.find("\"\"\"", index)) != -1) {
the_comment.insert(index, "\\");
index += 2;
}
if (!indent.isEmpty()) {
int len = indent.length() + 1;
index = 0;
while ((index = the_comment.find('\n', index)) != -1) {
the_comment.insert(index + 1, (const char*)indent);
index += len;
}
}
the_comment = "\"\"\"" + the_comment + "\"\"\"\n";
if (indent_needed) {
indent_needed = FALSE;
the_comment = indent + the_comment;
}
pp = p;
p = the_comment;
saved_indent = indent;
indent = "";
}
示例6: QCOMPARE
void tst_Q3CString::insert()
{
Q3CString a;
a = "Ys";
QCOMPARE(a.insert(1,'e'),(Q3CString)"Yes");
QCOMPARE(a.insert(3,'!'),(Q3CString)"Yes!");
QCOMPARE(a.insert(5,'?'),(Q3CString)"Yes! ?");
a="ABC";
QCOMPARE(a.insert(5,"DEF"),(Q3CString)"ABC DEF");
a="ABC";
QCOMPARE(a.insert(0,"ABC"),(Q3CString)"ABCABC");
QCOMPARE(a,(Q3CString)"ABCABC");
// ######### Q3CString::insert is not safe against self insertion...
// Q3CString res = "ABCABCABCABC";
// QCOMPARE(a.insert(0,a),res);
a += "ABCABC";
Q3CString res = "ABCABCABCABC";
QCOMPARE(a, res);
res = "<ABCABCABCABC";
QCOMPARE(a.insert(0,'<'),res );
res = "<>ABCABCABCABC";
QCOMPARE(a.insert(1,'>'),res );
}
示例7: if
void UmlClass::uml2java(bool rec) {
if (isJavaExternal())
set_JavaDecl(JavaSettings::externalClassDecl());
else {
Q3CString st = JavaSettings::classStereotype(stereotype());
UmlItem * pack = parent()->parent();
while (pack->kind() != aPackage)
pack = pack->parent();
if ((st == "stereotype") ||
(st == "metaclass") ||
(pack->stereotype() == "profile")) {
set_CppDecl("");
return;
}
if (st == "enum_pattern")
set_JavaDecl(JavaSettings::enumPatternDecl());
else if (st == "enum")
set_JavaDecl(JavaSettings::enumDecl());
else if (st == "interface")
set_JavaDecl(JavaSettings::interfaceDecl());
else if (st == "@interface") {
Q3CString s = JavaSettings::interfaceDecl();
int index = s.find("interface");
if (index != -1)
s.insert(index, '@');
set_JavaDecl(s);
}
else if (st == "ignored") {
set_JavaDecl("");
return;
}
else
set_JavaDecl(JavaSettings::classDecl());
if (rec) {
const Q3PtrVector<UmlItem> ch = children();
unsigned n = ch.size();
for (unsigned i = 0; i != n; i += 1)
ch[i]->uml2java(rec);
}
if (parent()->kind() == aClassView)
// not nested
artifact()->set_JavaSource(JavaSettings::sourceContent());
}
}
示例8: reverse_main
void UmlPackage::reverse_main(const Q3CString & type, Q3CString comment) {
// do not lost main !
Lex::mark();
UmlOperation::skip_body();
UmlArtifact * cp;
#ifdef ROUNDTRIP
bool roundtrip = FALSE;
if ((cp = UmlArtifact::get_main()) != 0) {
roundtrip = TRUE;
cp->set_usefull();
}
else
#endif
if ((cp = UmlBaseArtifact::create(get_deploymentview(0), "main")) == 0) {
UmlCom::trace("<font face=helvetica><b>cannot create <i>artifact main</i></b></font><br><hr>");
return;
}
if (! comment.isEmpty()) {
unsigned start = 0;
do {
comment.insert(start, "//");
start = comment.find('\n', start + 2) + 1;
} while (start != 0);
comment.append("\n\n");
}
comment.append(type);
comment.append(" main(");
comment.append(Lex::region());
comment.append("\n");
#ifdef ROUNDTRIP
if (roundtrip) {
if (cp->cppSource() != comment)
cp->set_CppSource(comment);
return;
}
#endif
cp->set_Stereotype("source");
cp->set_CppSource(comment);
cp->set_CppHeader(0);
}
示例9: addContructor
void UmlClass::addContructor(bool expl)
{
TRACE_FUNCTION;
QLOG_INFO() << "1.1.1";
UmlOperation * op = UmlOperation::create(this, name());
QLOG_INFO() << "1.1.2";
if (op == 0)
UmlCom::trace("can't add contructor");
else {
QLOG_INFO() << "1.1.3";
Q3CString s;
int index;
// remove the useless "${type} " mainly to remove the space
s = op->cppDecl();
QLOG_INFO() << s;
QLOG_INFO() << "1.1.4";
if (s.isEmpty())
s = CppSettings::operationDecl();
QLOG_INFO() << s;
QLOG_INFO() << "1.1.5";
if ((index = s.find("${type} ")) != -1)
s.remove(index, 8);
QLOG_INFO() << s;
QLOG_INFO() << "1.1.6";
if (expl && ((index = s.find("${name}")) != -1))
s.insert(index, "explicit ");
QLOG_INFO() << s;
QLOG_INFO() << "1.1.7";
op->set_CppDecl(s);
QLOG_INFO() << s;
QLOG_INFO() << "1.1.8";
s = op->cppDef();
QLOG_INFO() << s;
QLOG_INFO() << "1.1.81";
if (s.isEmpty())
s = CppSettings::operationDef();
QLOG_INFO() << "1.1.9";
if ((index = s.find("${type} ")) != -1)
s.remove(index, 8);
QLOG_INFO() << "1.1.10";
op->set_CppDef(s);
}
}
示例10: new_one
bool UmlOperation::new_one(Class * container, const Q3CString & name,
const Q3ValueList<FormalParameterList> & tmplts,
const Q3CString & oper_templ,
UmlTypeSpec & type, Q3CString str_actuals,
UmlClass * first_actual_class, Q3CString type_def,
aVisibility visibility,
bool finalp, bool abstractp, bool staticp,
bool nativep, bool strictfp, bool synchronizedp,
const Q3CString & array, Q3CString comment,
Q3CString description, Q3CString annotation
#ifdef ROUNDTRIP
, bool roundtrip, Q3PtrList<UmlItem> & expected_order
#endif
)
{
// the "(" was read
#ifdef TRACE
QLOG_INFO() <<"OPERATION '" << name << "'\n";
#endif
UmlClass * cl = container->get_uml();
UmlOperation * op;
#ifdef ROUNDTRIP
bool may_roundtrip = roundtrip &&
(!container->from_libp() || (visibility != PrivateVisibility));
UmlTypeSpec return_type;
Q3ValueList<UmlParameter> params;
Q3ValueList<UmlTypeSpec> exceptions;
Q3CString body;
if (may_roundtrip)
#else
if (
# ifdef REVERSE
container->from_libp() &&
# endif
(visibility == PrivateVisibility))
#endif
op = 0;
else {
op = UmlBaseOperation::create(cl, name);
if (op == 0) {
JavaCatWindow::trace(Q3CString("<font face=helvetica><b>cannot add operation <i>")
+ name + "</i> in <i>" + cl->name()
+ "</i></b></font><br>");
return FALSE;
}
#ifndef ROUNDTRIP
# if defined(REVERSE)
Statistic::one_operation_more();
# endif
#endif
}
Q3CString def;
#ifdef ROUNDTRIP
if (may_roundtrip || (op != 0)) {
#else
if (op != 0) {
op->set_Visibility(visibility);
if (staticp) op->set_isClassMember(TRUE);
if (abstractp) op->set_isAbstract(TRUE);
if (finalp) op->set_isJavaFinal(TRUE);
if (synchronizedp) op->set_isJavaSynchronized(TRUE);
if (! annotation.isEmpty()) op->set_JavaAnnotations(annotation);
#endif
def = JavaSettings::operationDef();
int index;
if (((index = def.find("${(}")) == -1) ||
((index = def.find("${)}", index + 4)) == -1) ||
((index = def.find("${throws}", index + 4)) == -1) ||
(def.find("${body}", index + 9) == -1) ||
((index = def.find("${type}")) == -1)) {
// use a definition where ${body] is not indented
def = " ${comment}${@}${visibility}${final}${static}${abstract}${synchronized}${type} ${name}${(}${)}${throws}${staticnl}{\n${body}}\n";
index = def.find("${type}");
}
if (!array.isEmpty())
def.insert(index + 7, (const char *)array);
if (nativep) {
def.insert(index, "native ");
index += 7;
// no body
int index2 = def.find("${throws}", index+7);
if (index2 != -1) {
def.resize(index2 + 12);
def[index2 + 9] = ';';
def[index2 + 10] = '\n';
}
//.........这里部分代码省略.........
示例11: generate
void UmlTransition::generate(Q3PtrList<UmlTransition> trs, UmlClass * machine, UmlClass * anystate, UmlState * state, Q3CString & body, Q3CString indent, bool completion)
{
UmlTransition * tr;
bool guard = FALSE;
for (tr = trs.first(); tr != 0; tr = trs.next()) {
body += indent;
if (!tr->cppGuard().isEmpty()) {
// manage guard
body += ((tr == trs.getFirst()) ? "if (" : "else if (")
+ tr->cppGuard() + ") {\n";
guard = TRUE;
}
else
// no gard : it is the last transition, may be the first
body += ((tr == trs.getFirst()) ? "{\n" : "else {\n");
// the target state
UmlItem * tg = tr->target();
bool self_external = (state == tg) && tr->isExternal();
while (tg->kind() != aState)
tg = tg->parent();
// the parent common to the current and the target state
UmlState * common = state;
if (self_external) {
// execute exit behavior
if (!state->cppExitBehavior().isEmpty())
body += indent + " _doexit(stm);\n";
}
else {
bool fromExit =
// the exit behavior is made entering in the exit point
(tr->parent()->kind() == anExitPointPseudoState);
// compute common parent and manage exit behavior
if (tr->target()->kind() != aTerminatePseudoState) {
while (!((UmlState *) tg)->inside(common)) {
if (!fromExit && !common->cppExitBehavior().isEmpty())
body += indent + " stm" + common->path() + "._doexit(stm);\n";
fromExit = FALSE;
switch (common->parent()->kind()) {
case aState:
common = (UmlState *) common->parent();
break;
case aRegion:
common = (UmlState *) common->parent()->parent();
break;
default:
UmlCom::trace("Error : transition from '" + state->name()
+ "' goes outside the state machine");
throw 0;
}
}
}
}
// manage transition activity
if (!tr->cppActivity().isEmpty())
body += "#ifdef VERBOSE_STATE_MACHINE\n" + indent +
" puts(\"DEBUG : execute activity of transition " + tr->name() +
"\");\n#endif\n" + tr->cppActivity();
// manage entry behavior
if (self_external) {
if (state->needCreate())
body += indent + " create(stm);\n";
}
else if (tr->target()->kind() != aTerminatePseudoState) {
if (tg != common) {
Q3CString enter;
UmlState * tg_parent;
// the enter behavior of the target state will be managed
// generating a call to create
for (tg_parent = (UmlState *) tg->parent();
tg_parent != common;
tg_parent = (UmlState *) tg_parent->parent())
if (!tg_parent->cppEntryBehavior().isEmpty())
enter.insert(0,
(const char *)(indent + " stm" + tg_parent->path() + "._doentry(stm);\n")); //[rageek] ambiguous
if (!enter.isEmpty())
body += enter;
}
// set the current state if needed
if (tg != state)
body += indent + " stm._set_currentState(stm"
+ ((UmlState *) tg)->path() + ");\n#ifdef VERBOSE_STATE_MACHINE\n" +
indent + " puts(\"DEBUG : current state is now " + ((UmlState *) tg)->prettyPath() +
"\");\n#endif\n";
}
//.........这里部分代码省略.........
示例12: new_one
//.........这里部分代码省略.........
if (! pfunc) {
typeform = (pretype.isEmpty())
? Q3CString("${type}")
: pretype + " ${type}";
container->compute_type(type, typespec, typeform);
}
else {
typespec.explicit_type = type.simplifyWhiteSpace();
int index = typespec.explicit_type.find("${name}");
if (index != -1)
typespec.explicit_type.remove(index, 7);
}
Q3CString decl = CppSettings::attributeDecl("");
int index = decl.find("${type}");
if ((index == -1) ||
(decl.find("${const}") == -1) ||
(decl.find("${name}") == -1) ||
(decl.find("${mutable}") == -1) ||
(decl.find("${volatile}") == -1) ||
(decl.find(';') == -1)) {
decl = " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};";
index = decl.find("${type}");
}
if (pfunc)
decl.replace(index, decl.find("${name}") + 7 - index, type);
else {
if (!modifier.isEmpty())
decl.insert(index + 7, (const char*)(Q3CString(" ") + modifier));
if (typeform != "${type}")
decl.replace(index, 7, typeform);
else if (typespec.type == 0) {
Q3CString t = typespec.explicit_type;
int index2;
if (!t.isEmpty() &&
(t.at(t.length() - 1) == '>') &&
((index2 = t.find('<')) > 0)) {
stereotype = t.left(index2);
typespec.explicit_type =
// may be a,b ...
t.mid(index2 + 1, t.length() - 2 - index2);
decl.replace(index, 7, "${stereotype}<${type}>");
}
}
if (!array.isEmpty())
decl.insert(decl.find("${name}") + 7, "${multiplicity}");
if (!bitfield.isEmpty())
decl.insert(decl.find(';'), (const char *)(Q3CString(" : ") + bitfield));
}
if (typenamep) {
int index = decl.find("${const}") + 8; // find cannot return -1
int index2 = decl.find("${mutable}") + 10; // find cannot return -1
int index3 = decl.find("${volatile}") + 11; // find cannot return -1
if (index2 > index) index = index2;
if (index3 > index) index = index3;
示例13: new_one
//.........这里部分代码省略.........
st_uml = st;
if (neq(rel->stereotype(), st_uml)) {
rel->set_Stereotype(st_uml);
container->set_updated();
}
}
else
#endif
rel->set_Stereotype((st_uml.isEmpty()) ? st : st_uml);
int index2;
if ((index2 = decl.find("<${type}>")) == -1) {
decl = " ${comment}${static}${mutable}${volatile}${const}${stereotype}<${type}> ${name}${value};";
index2 = decl.find("<${type}>");
}
decl.replace(index2, 9, typeform.mid(index));
}
else {
if (!array.isEmpty()) {
#ifdef ROUNDTRIP
if (roundtrip) {
if (neq(rel->multiplicity(), array)) {
rel->set_Multiplicity(array);
container->set_updated();
}
}
else
#endif
rel->set_Multiplicity(array);
}
decl = CppSettings::relationDecl(modifier != "*", array);
int index;
if (!pretype.isEmpty() &&
((index = decl.find("${type}")) != 0))
decl.insert(index,(const char*)( pretype + " "));
if ((modifier == "&") && ((index = decl.find("${type}")) != 0))
decl.insert(index + 7, " &");
}
if (! value.isEmpty()) {
int index = decl.find("${value}");
if (index != -1)
decl.insert(index + 2, "h_");
#ifdef ROUNDTRIP
if (roundtrip) {
if (!staticp) {
Q3CString v = rel->defaultValue();
if (!v.isEmpty() && (((const char *) v)[0] == '='))
v = v.mid(1);
if (nequal(v, value)) {
rel->set_DefaultValue(value);
container->set_updated();
}
}
}
else
#endif
rel->set_DefaultValue(value);
}
#ifdef ROUNDTRIP
if (roundtrip) {
if (neq(rel->cppDecl(), decl)) {
rel->set_CppDecl(decl);
container->set_updated();
}
if (decl.find("${description}") != -1) {
if (nequal(rel->description(), description)) {
rel->set_Description(description);
container->set_updated();
}
}
else if (nequal(rel->description(), Lex::simplify_comment(comment))) {
rel->set_Description(comment); // comment was set
container->set_updated();
}
// role name is the right one
return TRUE;
}
#endif
rel->set_CppDecl(decl);
if (!comment.isEmpty())
rel->set_Description((decl.find("${description") != -1)
? description : Lex::simplify_comment(comment));
return rel->set_RoleName(name);
}
示例14: add_import
void UmlArtifact::add_import(const char * i) {
Q3CString s = javaSource();
s.insert(s.find("${definition}"), i);
set_JavaSource(s);
}
示例15: read_param
bool UmlOperation::read_param(Class * container, unsigned rank,
UmlParameter & param, Q3CString & def, bool bypass)
{
#ifdef TRACE
QLOG_INFO() <<"UmlOperation::manage_param " << rank << "\n";
#endif
Q3CString s = Lex::read_word();
if (s.isEmpty()) {
Lex::premature_eof();
return FALSE;
}
else if (s == ")")
return FALSE;
#ifdef TRACE
QLOG_INFO() <<"commence par " << s << '\n';
#endif
param.type.type = 0;
param.type.explicit_type = 0;
param.dir = InputOutputDirection;
bool arrayp = FALSE;
if (s == "array") {
arrayp = TRUE;
s = Lex::read_word();
if (s.isEmpty()) {
Lex::premature_eof();
return FALSE;
}
}
else if ((((const char *) s)[0] != '&') &&
(((const char *) s)[0] != '$')) {
// a type
container->compute_type(s, param.type, 0);
s = Lex::read_word();
if (s.isEmpty()) {
Lex::premature_eof();
return FALSE;
}
}
bool refp;
if (s == "&") {
refp = TRUE;
s = Lex::read_word();
if (s.isEmpty()) {
Lex::premature_eof();
return FALSE;
}
}
else
refp = FALSE;
if (((const char *) s)[0] != '$') {
Lex::syntax_error("invalid parameter name : " + s);
return FALSE;
}
if (! bypass) {
Q3CString n_close = Q3CString().setNum(rank) + "}";
param.name = s.mid(1);
s = (rank == 0) ? "" : ", ";
if (arrayp)
s += "array ";
else if ((param.type.type != 0) || !param.type.explicit_type.isEmpty()) {
s += "${t" + n_close + " ";
}
if (refp)
s += "& ";
s += "${p" + n_close + "${v" + n_close;
def.insert(def.find("${)}"), // cannot be -1
(const char *)s);
}
s = Lex::read_word();
if (s == "=") {
Lex::mark();
s = skip_expr(0);
param.default_value = Lex::region();
param.default_value.truncate(param.default_value.length() - s.length());
if (*((const char *) param.default_value) == ' ')
param.default_value = param.default_value.mid(1);
}
else if (s.isEmpty()) {
Lex::premature_eof();
return FALSE;
}
//.........这里部分代码省略.........