本文整理汇总了C++中AttributeValueList类的典型用法代码示例。如果您正苦于以下问题:C++ AttributeValueList类的具体用法?C++ AttributeValueList怎么用?C++ AttributeValueList使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了AttributeValueList类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: nargs
void SymValFunc::execute() {
// return value for each symbol variable
boolean noargs = !nargs() && !nkeys();
int numargs = nargs();
if (!numargs) return;
ComValue* varvalues[numargs];
for (int i=0; i<numargs; i++) {
// return fully-evaluated value: expression --> symbol --> value
varvalues[i] = &stack_arg(i, false);
// lookup_symval(*varvalues[i]);
}
if (numargs>1) {
AttributeValueList* avl = new AttributeValueList();
ComValue retval(avl);
for (int i=0; i<numargs; i++)
avl->Append(new ComValue(*varvalues[i]));
reset_stack();
push_stack(retval);
} else {
ComValue retval (*varvalues[0]);
reset_stack();
push_stack(retval);
}
}
示例2: vallist
void SumFunc::execute() {
ComValue vallist(stack_arg(0));
reset_stack();
if (vallist.is_type(ComValue::ArrayType)) {
AttributeValueList* avl = vallist.array_val();
AddFunc addfunc(comterp());
push_stack(ComValue::zeroval());
Iterator it;
int count = 0;
for (avl->First(it); !avl->Done(it); avl->Next(it)) {
count++;
push_stack(*avl->GetAttrVal(it));
addfunc.exec(2,0);
}
if (_meanfunc) {
DivFunc divfunc(comterp());
ComValue divisor(count, ComValue::IntType);
push_stack(divisor);
divfunc.exec(2,0);
}
} else {
push_stack(vallist);
}
}
示例3: symbol_add
Transformer* CreateGraphicFunc::get_transformer(AttributeList* al) {
static int transform_symid = symbol_add("transform");
AttributeValue* transformv = nil;
Transformer* rel = nil;
AttributeValueList* avl = nil;
if (al &&
(transformv=al->find(transform_symid)) &&
transformv->is_array() &&
(avl=transformv->array_val()) &&
avl->Number()==6) {
float a00, a01, a10, a11, a20, a21;
Iterator it;
avl->First(it); a00=avl->GetAttrVal(it)->float_val();
avl->Next(it); a01=avl->GetAttrVal(it)->float_val();
avl->Next(it); a10=avl->GetAttrVal(it)->float_val();
avl->Next(it); a11=avl->GetAttrVal(it)->float_val();
avl->Next(it); a20=avl->GetAttrVal(it)->float_val();
avl->Next(it); a21=avl->GetAttrVal(it)->float_val();
rel = new Transformer(a00, a01, a10, a11, a20, a21);
} else {
rel = ((OverlayViewer*)_ed->GetViewer())->GetRel();
if (rel != nil) {
rel = new Transformer(rel);
rel->Invert();
}
}
return rel;
}
示例4: stack_arg
void CreateLineFunc::execute() {
const int x0 = 0;
const int y0 = 1;
const int x1 = 2;
const int y1 = 3;
const int n = 4;
int coords[n];
ComValue& vect = stack_arg(0);
if (!vect.is_type(ComValue::ArrayType) || vect.array_len() != n) {
reset_stack();
push_stack(ComValue::nullval());
return;
}
ALIterator i;
AttributeValueList* avl = vect.array_val();
avl->First(i);
for (int j=0; j<n && !avl->Done(i); j++) {
coords[j] = avl->GetAttrVal(i)->int_val();
avl->Next(i);
}
AttributeList* al = stack_keys();
Resource::ref(al);
reset_stack();
PasteCmd* cmd = nil;
if (coords[x0] != coords[x1] || coords[y0] != coords[y1]) {
BrushVar* brVar = (BrushVar*) _ed->GetState("BrushVar");
PatternVar* patVar = (PatternVar*) _ed->GetState("PatternVar");
ColorVar* colVar = (ColorVar*) _ed->GetState("ColorVar");
Transformer* rel = get_transformer(al);
ArrowVar* aVar = (ArrowVar*) _ed->GetState("ArrowVar");
ArrowLine* line = new ArrowLine(coords[x0], coords[y0], coords[x1], coords[y1], aVar->Head(), aVar->Tail(),
_ed->GetViewer()->GetMagnification(), stdgraphic);
if (brVar != nil) line->SetBrush(brVar->GetBrush());
if (colVar != nil) {
line->FillBg(!colVar->GetBgColor()->None());
line->SetColors(colVar->GetFgColor(), colVar->GetBgColor());
}
line->SetTransformer(rel);
Unref(rel);
ArrowLineOvComp* comp = new ArrowLineOvComp(line);
comp->SetAttributeList(al);
if (PasteModeFunc::paste_mode()==0)
cmd = new PasteCmd(_ed, new Clipboard(comp));
ComValue compval(new OverlayViewRef(comp), symbol_add("ArrowLineComp"));
push_stack(compval);
execute_log(cmd);
} else
push_stack(ComValue::nullval());
Unref(al);
}
示例5: symbol_add
void EvalFunc::execute() {
static int symret_sym = symbol_add("symret");
ComValue symretv(stack_key(symret_sym));
if (!comterp()->is_serv()) {
cerr << "need server mode comterp (or remote mode) for eval command\n";
reset_stack();
push_stack(ComValue::nullval());
return;
}
// evaluate every string fixed argument on the stack and return in array
int numargs = nargsfixed();
if (numargs>1) {
AttributeValueList* avl = nil;
for (int i=0; i<numargs; i++) {
ComValue argstrv (stack_arg(i));
if (argstrv.is_nil()) break;
if (argstrv.is_string()) {
ComValue* val = new ComValue(comterpserv()->run(argstrv.symbol_ptr(), true /* nested */));
if (val->is_nil() && symretv.is_true()) {
delete val;
val = new ComValue(argstrv.symbol_val(), AttributeValue::SymbolType);
}
if (!avl) avl = new AttributeValueList();
avl->Append(val);
}
}
reset_stack();
if (avl) {
ComValue retval(avl);
push_stack(retval);
}
}
/* unless only single argument */
else if (numargs==1) {
ComValue argstrv (stack_arg(0));
reset_stack();
if (argstrv.is_nil()) {
push_stack(ComValue::nullval());
} else if (argstrv.is_string()) {
ComValue val(comterpserv()->run(argstrv.symbol_ptr(), true /* nested */));
if (val.is_nil() && symretv.is_true()) {
val.assignval(ComValue(argstrv.symbol_val(), AttributeValue::SymbolType));
}
push_stack(val);
}
} else
reset_stack();
}
示例6: symvalv
void SplitStrFunc::execute() {
ComValue symvalv(stack_arg(0));
reset_stack();
if (symvalv.is_string()) {
AttributeValueList* avl = new AttributeValueList();
ComValue retval(avl);
const char* str = symvalv.symbol_ptr();
int len = strlen(str);
for (int i=0; i<len; i++)
avl->Append(new AttributeValue(str[i]));
push_stack(retval);
} else
push_stack(ComValue::nullval());
}
示例7: listv
void JoinStrFunc::execute() {
ComValue listv(stack_arg(0));
static int sym_symid = symbol_add("sym");
ComValue symflagv(stack_key(sym_symid));
boolean symflag = symflagv.is_true();
reset_stack();
if (listv.is_array()) {
AttributeValueList* avl = listv.array_val();
if (avl) {
char cbuf[avl->Number()+1];
Iterator i;
int cnt=0;
for (avl->First(i); !avl->Done(i); avl->Next(i)) {
cbuf[cnt] = avl->GetAttrVal(i)->char_val();
cnt++;
}
cbuf[cnt] = '\0';
ComValue retval(symbol_add(cbuf), symflag ? ComValue::SymbolType : ComValue::StringType);
push_stack(retval);
return;
}
}
push_stack(ComValue::nullval());
}
示例8: nargstotal
void PostEvalFunc::execute() {
// evaluate every fixed argument on the stack and return in array
int numargs = nargstotal();
if (numargs) {
AttributeValueList* avl = nil;
for (int i=0; i<numargs; i++) {
ComValue* val = new ComValue(stack_arg_post_eval(i));
if (val->is_nil()) {
delete val;
break;
}
if (!avl) avl = new AttributeValueList();
avl->Append(val);
}
reset_stack();
if (avl) {
ComValue retval(avl);
push_stack(retval);
}
} else
reset_stack();
}
示例9: convertv
void GrStreamFunc::execute() {
ComValue convertv(stack_arg_post_eval(0));
if (convertv.object_compview()) {
reset_stack();
static StreamNextFunc* snfunc = nil;
if (!snfunc) {
snfunc = new StreamNextFunc(comterp());
snfunc->funcid(symbol_add("stream"));
}
AttributeValueList* avl = new AttributeValueList();
Component* comp = ((ComponentView*)convertv.obj_val())->GetSubject();
if (!comp->IsA(OVERLAYS_COMP)) {
push_stack(ComValue::nullval());
return;
}
OverlaysComp* ovcomps = (OverlaysComp*)comp;
Iterator it;
for(ovcomps->First(it); !ovcomps->Done(it); ovcomps->Next(it)) {
OverlayComp* subcomp = (OverlayComp*) ovcomps->GetComp(it);
AttributeValue* av =
new AttributeValue(new OverlayViewRef(subcomp), subcomp->classid());
avl->Append(av);
}
ComValue stream(snfunc, avl);
stream.stream_mode(-1); // for internal use (use by this func)
push_stack(stream);
} else {
StreamFunc strmfunc(comterp());
strmfunc.exec(funcstate()->nargs(), funcstate()->nkeys(), pedepth());
return;
}
}
示例10: formatstr
//.........这里部分代码省略.........
strncpy(fbuf, fstrptr, BUFSIZ);
switch( printval.type() )
{
case ComValue::SymbolType:
case ComValue::StringType:
out_form(out, fbuf, symbol_pntr( printval.symbol_ref()));
break;
case ComValue::BooleanType:
out_form(out, fbuf, printval.boolean_ref());
break;
case ComValue::CharType:
out_form(out, fbuf, printval.char_ref());
break;
case ComValue::UCharType:
out_form(out, fbuf, printval.uchar_ref());
break;
case ComValue::IntType:
out_form(out, fbuf, printval.int_ref());
break;
case ComValue::UIntType:
out_form(out, fbuf, printval.uint_ref());
break;
case ComValue::LongType:
out_form(out, fbuf, printval.long_ref());
break;
case ComValue::ULongType:
out_form(out, fbuf, printval.ulong_ref());
break;
case ComValue::FloatType:
out_form(out, fbuf, printval.float_ref());
break;
case ComValue::DoubleType:
out_form(out, fbuf, printval.double_ref());
break;
case ComValue::ArrayType:
{
ALIterator i;
AttributeValueList* avl = printval.array_val();
avl->First(i);
boolean first = true;
while (!avl->Done(i)) {
ComValue val(*avl->GetAttrVal(i));
push_stack(formatstr);
push_stack(val);
exec(2,0);
avl->Next(i);
if (!avl->Done(i)) out << "\n";
}
}
break;
case ComValue::BlankType:
out << "<blank>";
break;
case ComValue::UnknownType:
out_form(out, fbuf, nil);
break;
case ComValue::ObjectType:
out_form(out, fbuf, symbol_pntr(printval.class_symid()));
break;
default:
break;
}
}
}
reset_stack();
if (stringflag.is_true() || strflag.is_true()) {
out << '\0';
ComValue retval(((std::strstreambuf*)strmbuf)->str());
push_stack(retval);
} else if (symbolflag.is_true() || symflag.is_true()) {
out << '\0';
int symbol_id = symbol_add(((std::strstreambuf*)strmbuf)->str());
ComValue retval(symbol_id, ComValue::SymbolType);
push_stack(retval);
} else {
out.flush();
push_stack(ComValue::blankval());
}
delete strmbuf;
}
示例11: formatstr
//.........这里部分代码省略.........
strmbuf = new std::strstreambuf();
#endif
ostream out(strmbuf);
int narg = nargs();
if (narg==1) {
if (formatstr.is_string())
out << formatstr.symbol_ptr();
else
out << formatstr; // which could be arbitrary ComValue
} else {
switch( printval.type() )
{
case ComValue::SymbolType:
case ComValue::StringType:
out_form(out, fstr, symbol_pntr( printval.symbol_ref()));
break;
case ComValue::BooleanType:
out_form(out, fstr, printval.boolean_ref());
break;
case ComValue::CharType:
out_form(out, fstr, printval.char_ref());
break;
case ComValue::UCharType:
out_form(out, fstr, printval.uchar_ref());
break;
case ComValue::IntType:
out_form(out, fstr, printval.int_ref());
break;
case ComValue::UIntType:
out_form(out, fstr, printval.uint_ref());
break;
case ComValue::LongType:
out_form(out, fstr, printval.long_ref());
break;
case ComValue::ULongType:
out_form(out, fstr, printval.ulong_ref());
break;
case ComValue::FloatType:
out_form(out, fstr, printval.float_ref());
break;
case ComValue::DoubleType:
out_form(out, fstr, printval.double_ref());
break;
case ComValue::ArrayType:
{
ALIterator i;
AttributeValueList* avl = printval.array_val();
avl->First(i);
boolean first = true;
while (!avl->Done(i)) {
ComValue val(*avl->GetAttrVal(i));
push_stack(formatstr);
push_stack(val);
exec(2,0);
avl->Next(i);
if (!avl->Done(i)) out << "\n";
}
}
break;
case ComValue::BlankType:
out << "<blank>";
break;
case ComValue::UnknownType:
out_form(out, fstr, nil);
break;
default:
break;
}
}
if (stringflag.is_true() || strflag.is_true()) {
out << '\0';
ComValue retval(((std::strstreambuf*)strmbuf)->str());
push_stack(retval);
} else if (symbolflag.is_true() || symflag.is_true()) {
out << '\0';
int symbol_id = symbol_add(((std::strstreambuf*)strmbuf)->str());
ComValue retval(symbol_id, ComValue::SymbolType);
push_stack(retval);
}
delete strmbuf;
}
示例12: objv
void TransformerFunc::execute() {
ComValue objv(stack_arg(0));
ComValue transv(stack_arg(0));
reset_stack();
if (objv.object_compview()) {
ComponentView* compview = (ComponentView*)objv.obj_val();
if (compview && compview->GetSubject()) {
OverlayComp* comp = (OverlayComp*)compview->GetSubject();
Graphic* gr = comp->GetGraphic();
if (gr) {
Transformer* trans = gr->GetTransformer();
if (transv.is_unknown() || !transv.is_array() || transv.array_val()->Number()!=6) {
AttributeValueList* avl = new AttributeValueList();
float a00, a01, a10, a11, a20, a21;
trans->matrix(a00, a01, a10, a11, a20, a21);
avl->Append(new AttributeValue(a00));
avl->Append(new AttributeValue(a01));
avl->Append(new AttributeValue(a10));
avl->Append(new AttributeValue(a11));
avl->Append(new AttributeValue(a20));
avl->Append(new AttributeValue(a21));
ComValue retval(avl);
push_stack(retval);
} else {
float a00, a01, a10, a11, a20, a21;
AttributeValueList* avl = transv.array_val();
Iterator it;
AttributeValue* av;
avl->First(it);
av = avl->GetAttrVal(it);
a00 = av->float_val();
avl->Next(it);
av = avl->GetAttrVal(it);
a01 = av->float_val();
avl->Next(it);
av = avl->GetAttrVal(it);
a10 = av->float_val();
avl->Next(it);
av = avl->GetAttrVal(it);
a11 = av->float_val();
avl->Next(it);
av = avl->GetAttrVal(it);
a20 = av->float_val();
avl->Next(it);
av = avl->GetAttrVal(it);
a21 = av->float_val();
Transformer t(a00, a01, a10, a11, a20, a21);
*gr->GetTransformer()=t;
ComValue compval(new OverlayViewRef(comp), comp->class_symid());
push_stack(compval);
}
}
}
}
}
示例13: switch
ostream& operator<< (ostream& out, const AttributeValue& sv) {
AttributeValue* svp = (AttributeValue*)&sv;
char* title;
char* symbol;
int counter;
#if 0
switch( svp->type() )
{
case AttributeValue::KeywordType:
out << "Keyword (" << symbol_pntr( svp->symbol_ref() ) <<
")";
break;
case AttributeValue::CommandType:
title = "Command (";
symbol = symbol_pntr( svp->symbol_ref() );
out << title << symbol;
counter = strlen(title) + strlen(symbol);
while( ++counter < 32 ) out << ' ';
out << ")";
break;
case AttributeValue::SymbolType:
out << "symbol (" << svp->symbol_ptr() << ")";
break;
case AttributeValue::StringType:
out << "string (" << svp->string_ptr() << ")";
break;
case AttributeValue::BooleanType:
out << "boolean (" << svp->boolean_ref() << ")";
break;
case AttributeValue::CharType:
out << "char (" << svp->char_ref() << ":" << (int)svp->char_ref() << ")";
break;
case AttributeValue::UCharType:
out << "uchar (" << svp->char_ref() << ":" << (int)svp->char_ref() << ")";
break;
case AttributeValue::IntType:
out << "int (" << svp->int_ref() << ")";
break;
case AttributeValue::UIntType:
if (svp->state()==AttributeValue::OctState)
out << "uint (" << svp->uint_ref() << ")";
else if (svp->state()==AttributeValue::HexState)
out << "uint (" << svp->uint_ref() << ")";
else
out << "uint (" << svp->uint_ref() << ")";
break;
case AttributeValue::LongType:
out << "Long (" << svp->long_ref() << ")";
break;
case AttributeValue::ULongType:
out << "ulong (" << svp->ulong_ref() << ")";
break;
case AttributeValue::FloatType:
out << "float (" << svp->float_ref() << ")";
break;
case AttributeValue::DoubleType:
out << "double (" << svp->double_ref() << ")";
//printf("%9.2f\n", svp->double_ref());
break;
case AttributeValue::EofType:
out << "eof";
break;
case AttributeValue::ArrayType:
{
out << "list of length " << svp->array_len();
ALIterator i;
AttributeValueList* avl = svp->array_val();
avl->First(i);
boolean first = true;
while (!avl->Done(i)) {
out << "\n\t" << *avl->GetAttrVal(i);
avl->Next(i);
}
}
break;
case AttributeValue::BlankType:
break;
default:
break;
}
#else
switch(svp->type()) {
case AttributeValue::KeywordType:
out << "Keyword (" << symbol_pntr( svp->symbol_ref() ) <<
//.........这里部分代码省略.........