void vesting_balance_object::withdraw(const time_point_sec& now, const asset& amount) { assert(amount <= balance); on_withdraw_visitor vtor(balance, now, amount); policy.visit(vtor); balance -= amount; }
void ve_edit_move (DESCRIPTOR_DATA * c, int dir) { ROOM_DATA *room = NULL; /* Can only move around when edit object is a room */ if (c->proc) { ve_beep (c); return; } if (EXIT (c->character, dir)) room = vtor (EXIT (c->character, dir)->to_room); if (!room) { ve_beep (c); return; } printf ("Room %d -> Room %d\n", c->character->in_room, room->nVirtual); char_from_room (c->character); char_to_room (c->character, room->nVirtual); ve_reconstruct (c); c->str = &room->description; ve_setup_screen (c); }
void mob_int_indirect (char *token, int *value, int *type) { if (!str_cmp (token, "room")) { *value = (long int) vtor (*value); *type = MP_TYPE_ROOM_DATA; } else if (!str_cmp (token, "obj")) { *value = (long int) vtoo (*value); *type = MP_TYPE_OBJ_DATA; } else if (!str_cmp (token, "char")) { *value = (long int) vtom (*value); *type = MP_TYPE_CHAR_DATA; } else { *value = 0; *type = -1; } }
CHAR_DATA * mp_whohasobj (CHAR_DATA * mob, int obj_virt) { CHAR_DATA *tch; OBJ_DATA *tobj; ROOM_DATA *room; room = vtor (mob->in_room); if (!room) return NULL; /* If the character is hiding the object in another object, this routine will not find it */ for (tch = room->people; tch; tch = tch->next_in_room) { if (tch->right_hand && tch->right_hand->nVirtual == obj_virt && CAN_SEE_OBJ (mob, tch->right_hand)) return tch; if (tch->left_hand && tch->left_hand->nVirtual == obj_virt && CAN_SEE_OBJ (mob, tch->left_hand)) return tch; for (tobj = tch->equip; tobj; tobj = tobj->next_content) if (tobj->nVirtual == obj_virt && CAN_SEE_OBJ (mob, tobj)) return tobj->equiped_by; } return NULL; }
void pow2_operation::get_required_active_authorities( flat_set<account_name_type>& a )const { if( !new_owner_key ) { pow2_operation_get_required_active_visitor vtor( a ); work.visit( vtor ); } }
T from_which_variant( int which, const variant& v ) { // Parse a variant for a known which() T dummy; dummy.set_which( which ); impl::from_which_visitor< T > vtor(v); return dummy.visit( vtor ); }
void unpack( Stream& s, graphene::chain::extension<T>& value, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) { FC_ASSERT( _max_depth > 0 ); --_max_depth; value = graphene::chain::extension<T>(); graphene::chain::graphene_extension_unpack_visitor<Stream, T> vtor( s, value.value, _max_depth ); fc::reflector<T>::visit( vtor ); FC_ASSERT( vtor.count_left == 0 ); // unrecognized extension throws here }
void from_variant( const fc::variant& var, graphene::chain::extension<T>& value, uint32_t max_depth ) { value = graphene::chain::extension<T>(); if( var.is_null() ) return; if( var.is_array() ) { FC_ASSERT( var.size() == 0 ); return; } graphene_extension_from_variant_visitor<T> vtor( var.get_object(), value.value, max_depth ); fc::reflector<T>::visit( vtor ); FC_ASSERT( vtor.count_left == 0 ); // unrecognized extension throws here }
/* * Clean pts sdev_nodes that are no longer valid. */ static void devpts_prunedir(struct sdev_node *ddv) { struct vnode *vp; struct sdev_node *dv, *next = NULL; int (*vtor)(struct sdev_node *) = NULL; ASSERT(ddv->sdev_flags & SDEV_VTOR); vtor = (int (*)(struct sdev_node *))sdev_get_vtor(ddv); ASSERT(vtor); if (rw_tryupgrade(&ddv->sdev_contents) == NULL) { rw_exit(&ddv->sdev_contents); rw_enter(&ddv->sdev_contents, RW_WRITER); } for (dv = ddv->sdev_dot; dv; dv = next) { next = dv->sdev_next; /* skip stale nodes */ if (dv->sdev_flags & SDEV_STALE) continue; /* validate and prune only ready nodes */ if (dv->sdev_state != SDEV_READY) continue; switch (vtor(dv)) { case SDEV_VTOR_VALID: case SDEV_VTOR_SKIP: continue; case SDEV_VTOR_INVALID: sdcmn_err7(("prunedir: destroy invalid " "node: %s(%p)\n", dv->sdev_name, (void *)dv)); break; } vp = SDEVTOV(dv); if (vp->v_count > 0) continue; SDEV_HOLD(dv); /* remove the cache node */ (void) sdev_cache_update(ddv, &dv, dv->sdev_name, SDEV_CACHE_DELETE); } rw_downgrade(&ddv->sdev_contents); }
void ve_map_map (DESCRIPTOR_DATA * c, struct map_data *map_ptr, int x, int y, int *found) { int i; int j; int dir; ROOM_DATA *room; if (!map_ptr->map[x][y]) return; if (!(room = vtor (map_ptr->map[x][y]))) return; if (room->dir_option[UP]) map_ptr->ups[x][y] = room->dir_option[UP]->to_room; if (room->dir_option[DOWN]) map_ptr->downs[x][y] = room->dir_option[DOWN]->to_room; for (i = -1; i <= 1; i++) { for (j = -1; j <= 1; j++) { if (VE_ABS (x + i) >= MAP_MAX_LINE_DIM (c) || VE_ABS (y + j) >= MAP_MAX_COL_DIM (c) || x + i < 0 || y + j < 0) continue; /* Skip if we've caught room on another pass */ if (map_ptr->map[x + i][y + j]) continue; if ((dir = ve_offset_to_dir (i, j)) == -1) continue; if (room->dir_option[dir]) { map_ptr->map[x + i][y + j] = room->dir_option[dir]->to_room; *found = 1; } } } }
/* * First step in refreshing directory contents. * Remove each invalid entry and rebuild the link * reference for each stale entry. */ static void devvt_prunedir(struct sdev_node *ddv) { struct vnode *vp; struct sdev_node *dv, *next = NULL; int (*vtor)(struct sdev_node *) = NULL; ASSERT(ddv->sdev_flags & SDEV_VTOR); vtor = (int (*)(struct sdev_node *))sdev_get_vtor(ddv); ASSERT(vtor); for (dv = SDEV_FIRST_ENTRY(ddv); dv; dv = next) { next = SDEV_NEXT_ENTRY(ddv, dv); switch (vtor(dv)) { case SDEV_VTOR_VALID: break; case SDEV_VTOR_SKIP: break; case SDEV_VTOR_INVALID: vp = SDEVTOV(dv); if (vp->v_count != 0) break; /* remove the cached node */ SDEV_HOLD(dv); (void) sdev_cache_update(ddv, &dv, dv->sdev_name, SDEV_CACHE_DELETE); SDEV_RELE(dv); break; case SDEV_VTOR_STALE: devvt_rebuild_stale_link(ddv, dv); break; } } }
void vesting_balance_object::deposit_vested(const time_point_sec& now, const asset& amount) { on_deposit_vested_visitor vtor(balance, now, amount); policy.visit(vtor); balance += amount; }
void ve_paint_map (DESCRIPTOR_DATA * c, struct map_data *map_ptr) { int i; int j; int t1; int t2; int duplicate_room; int same_room; int con_to; /* Connects to another room */ int con_to_good; /* Connects to expected room */ int con_from; /* Connects from another room */ int con_from_good; /* Connects from expected room */ char buf[MAX_STRING_LENGTH]; ROOM_DATA *room; /* From room */ ROOM_DATA *room2; /* To room */ sprintf (buf, "%s", HOME CLEAR); send_out (c, buf); for (i = 0; i < MAP_MAX_LINE_DIM (c); i++) { for (j = 0; j < MAP_MAX_COL_DIM (c); j++) { if (map_ptr->map[i][j] <= 0) continue; ve_goto (c, i * 4 + 1, j * 10 + 1); duplicate_room = 0; if (j == MAP_MID_OFFSET_COL (c) && i == MAP_MID_OFFSET_LINE (c)) sprintf (buf, "%s%5d%s", "#4", map_ptr->map[i][j], "#0"); else { for (t1 = 0; t1 < MAP_MAX_LINE_DIM (c) && !duplicate_room; t1++) for (t2 = 0; t2 < MAP_MAX_COL_DIM (c); t2++) if ((t1 != i || t2 != j) && map_ptr->map[t1][t2] == map_ptr->map[i][j]) { duplicate_room = 1; break; } if (vtor (map_ptr->map[i][j]) && !strncmp (vtor (map_ptr->map[i][j])->description, "No Description Set", 18)) sprintf (buf, "%s%5d%s", "#2", map_ptr->map[i][j], "#0"); else if (duplicate_room) sprintf (buf, "%s%5d%s", "#1", map_ptr->map[i][j], "#0"); else sprintf (buf, "%5d", map_ptr->map[i][j]); } send_out (c, buf); if (map_ptr->ups[i][j]) { ve_goto (c, i * 4, j * 10 + 2); send_out (c, "#3U#0"); } if (map_ptr->downs[i][j]) { ve_goto (c, i * 4 + 2, j * 10 + 2); send_out (c, "#3D#0"); } if (j + 1 < MAP_MAX_COL_DIM (c) && map_ptr->map[i][j + 1]) { con_from = 0; con_from_good = 0; if (map_ptr->map[i][j] == map_ptr->map[i][j + 1]) same_room = 1; else same_room = 0; room = vtor (map_ptr->map[i][j + 1]); if (!room); else if (!room->dir_option[WEST]); else if (room->dir_option[WEST]->to_room == map_ptr->map[i][j]) { con_from_good = 1; con_from = 1; } else if (room->dir_option[WEST]->to_room > 0) con_from = 1; con_to = 0; con_to_good = 0; room2 = vtor (map_ptr->map[i][j]); if (!room2); else if (!room2->dir_option[EAST]); else if (room2->dir_option[EAST]->to_room == map_ptr->map[i][j + 1]) { con_to_good = 1; con_to = 1; } else if (room2->dir_option[EAST]->to_room > 0) con_to = 1; *buf = '\0'; if (same_room) { ve_goto (c, i * 4 + 1, j * 10 + 6); send_out (c, "#1.....#0"); } else { if (con_from_good && con_to_good) strcpy (buf, "<===>"); else if (con_from_good) strcpy (buf, "<----"); else if (con_to_good) strcpy (buf, "---->"); if (*buf) { ve_goto (c, i * 4 + 1, j * 10 + 6); send_out (c, buf); } if (con_to && !con_to_good) { ve_goto (c, i * 4 + 2, j * 10 + 5); send_out (c, "#5>?#0"); } if (con_from && !con_from_good) { ve_goto (c, i * 4 + 2, j * 10 + 10); send_out (c, "#5?<#0"); } } } if (i + 1 < MAP_MAX_LINE_DIM (c) && map_ptr->map[i + 1][j]) { con_from = 0; con_from_good = 0; if (map_ptr->map[i][j] == map_ptr->map[i + 1][j]) same_room = 1; else same_room = 0; room = vtor (map_ptr->map[i + 1][j]); if (!room); else if (!room->dir_option[NORTH]); else if (room->dir_option[NORTH]->to_room == map_ptr->map[i][j]) { con_from_good = 1; con_from = 1; } else if (room->dir_option[NORTH]->to_room > 0) con_from = 1; con_to = 0; con_to_good = 0; room2 = vtor (map_ptr->map[i][j]); if (!room2); else if (!room2->dir_option[SOUTH]); else if (room2->dir_option[SOUTH]->to_room == map_ptr->map[i + 1][j]) { con_to_good = 1; con_to = 1; } else if (room2->dir_option[SOUTH]->to_room > 0) con_to = 1; *buf = '\0'; if (same_room) { ve_goto (c, i * 4 + 2, j * 10 + 3); send_out (c, "#1.#0"); ve_goto (c, i * 4 + 3, j * 10 + 3); send_out (c, "#1.#0"); ve_goto (c, i * 4 + 4, j * 10 + 3); send_out (c, "#1.#0"); } else { if (con_from_good) { ve_goto (c, i * 4 + 2, j * 10 + 3); send_out (c, "^"); } if (con_from_good && con_to_good) { ve_goto (c, i * 4 + 3, j * 10 + 3); send_out (c, "#"); } else if (con_from_good || con_to_good) { ve_goto (c, i * 4 + 3, j * 10 + 3); send_out (c, "|"); } if (con_to_good) { ve_goto (c, i * 4 + 4, j * 10 + 3); send_out (c, "v"); } if (con_to && !con_to_good) { ve_goto (c, i * 4 + 2, j * 10 + 2); send_out (c, "#5v#0"); ve_goto (c, i * 4 + 3, j * 10 + 2); send_out (c, "#5?#0"); } if (con_from && !con_from_good) { ve_goto (c, i * 4 + 4, j * 10 + 4); send_out (c, "#5^#0"); ve_goto (c, i * 4 + 3, j * 10 + 4); send_out (c, "#5?#0"); } } } } } ve_goto (c, c->max_lines, 1); sprintf (buf, "[%5d]: %s%s%s", c->character->in_room, "#5", c->character->room->name, "#0"); send_out (c, buf); }
void mobprog (CHAR_DATA * ch, CHAR_DATA * mob, MOBPROG_DATA * program, int trigger, char *argument, int *ret) { char line[MAX_STRING_LENGTH]; char command[MAX_STRING_LENGTH]; char *line_ptr; char *prog_ptr; char *prog; char token[MAX_STRING_LENGTH]; int levels[MAX_PROG_LINES]; char *level_ptrs[MAX_PROG_LINES]; int level_ifs[MAX_DEPTH]; int lines; int level; int cur_level; int line_no; int i; *ret = 0; // temporary lockout if (1 || !engine.in_test_mode ()) { return; } if (ch->desc) { return; } // don't want progs active on bp if (engine.in_build_mode ()) return; prog = program->prog; for (lines = 0; lines < MAX_PROG_LINES; lines++) { levels[lines] = 0; level_ptrs[lines] = NULL; } setvar (mob, "mob", (long int) mob, MP_TYPE_CHAR_DATA); setvar (mob, "ch", (long int) ch, MP_TYPE_CHAR_DATA); setvar (mob, "room", (long int) vtor (mob->in_room), MP_TYPE_ROOM_DATA); prog_ptr = prog; level = 0; lines = 0; while ((level_ptrs[lines] = get_line (&prog_ptr, line))) { line_ptr = line; get_prog_token (&line_ptr, token); if (!str_cmp (token, "if") || !str_cmp (token, "while")) levels[lines] = level++; else if (!str_cmp (token, "elseif") || !str_cmp (token, "else")) levels[lines] = level - 1; else if (!str_cmp (token, "endif") || !str_cmp (token, "endwhile")) levels[lines] = --level; else levels[lines] = level; lines++; } line_no = 0; /* Re-entry for a delayed trigger */ if (ch->trigger_id == trigger) { /* Reset delayed trigger if trigger re-activated (vs the delay timer expired) */ if (!ch->trigger_delay) { /* Make it so all ifs (elseifs..) appear executed */ for (i = 0; i < MAX_DEPTH; i++) level_ifs[i] = 1; line_no = ch->trigger_line; } ch->trigger_id = 0; ch->trigger_delay = 0; } prog_ptr = level_ptrs[line_no]; while (get_line (&prog_ptr, line)) { strcpy (current_line, line); if (GET_POS (ch) == POSITION_DEAD) { *ret = 0; return; } line_ptr = line; get_prog_token (&line_ptr, token); if (*token == '!') ; else if (!*token || *token == '\n' || *token == '\r' || *token == ' ') ; else if (!str_cmp (token, "ci")) { mob_string (mob, &line_ptr, command); if (*command) command_interpreter (mob, command); if (mob->deleted) return; if (mob->delay || GET_FLAG (mob, FLAG_ENTERING) || GET_FLAG (mob, FLAG_LEAVING)) { mob->flags |= FLAG_INHIBITTED; mob->trigger_delay = 1; mob->trigger_line = line_no + 1; mob->trigger_id = trigger; return; } } else if (!str_cmp (token, "global") || !str_cmp (token, "var")) define_variable (mob, program, line_ptr); else if (!str_cmp (token, "while")) { require_open_paren (&line_ptr); cur_level = levels[line_no]; if (!mp_eval_eq (mob, &line_ptr)) { line_no++; while (levels[line_no] != cur_level) line_no++; } } else if (!str_cmp (token, "if") || !str_cmp (token, "elseif")) { cur_level = levels[line_no]; if (!str_cmp (token, "if")) level_ifs[cur_level] = 0; if (!level_ifs[cur_level]) require_open_paren (&line_ptr); if (level_ifs[cur_level] || !mp_eval_eq (mob, &line_ptr)) { while (levels[line_no + 1] != cur_level) line_no++; } else level_ifs[cur_level] = 1; } else if (!str_cmp (token, "else")) { cur_level = levels[line_no]; if (level_ifs[cur_level]) { while (levels[line_no + 1] != cur_level) line_no++; } } else if (!str_cmp (token, "reject_command")) { *ret = 0; return; } else if (!str_cmp (token, "endwhile")) { cur_level = levels[line_no]; if (line_no > 0) /* If there is an endwhile on the first line */ line_no--; while (line_no && levels[line_no] != cur_level) line_no--; line_no--; /* Gets incremented at the end of the while */ } else if (!str_cmp (token, "endif")); else if (!str_cmp (token, "delay")) { /* A previously delayed trigger is forgotten */ mob->trigger_delay = mp_eval_eq (mob, &line_ptr); mob->trigger_line = line_no + 1; mob->trigger_id = trigger; return; } else if (!str_cmp (token, "alarm")) mob->alarm = mp_eval_eq (mob, &line_ptr); else if (!str_cmp (token, "return")) return; else assignment (mob, program, token, &line_ptr); prog_ptr = level_ptrs[++line_no]; } }
void to_variant( const graphene::chain::extension<T>& value, fc::variant& var, uint32_t max_depth ) { graphene_extension_to_variant_visitor<T> vtor( value.value, max_depth ); fc::reflector<T>::visit( vtor ); var = vtor.mvo; }
/* * 指定したタスクに LOWLIB をくっつける */ ER load_lowlib (VP *argp) { struct a { ID task; B *name; } *args = (struct a*)argp; W i; T_TCB *tskp; #ifdef MONAKA VP ppage; struct lowlib_data *plowlib; #endif ER errno; struct lowlib_data ld; UW *paddr; if (args->task < 0) { return (E_ID); } if (args->name == NULL) { return (E_PAR); } tskp = get_tskp (args->task); if (tskp == NULL) { return (E_ID); } for (i = 0; i < nlowlib; i++) { if (strncmp (args->name, lowlib_table[i].name, MAX_MODULE_NAME) == 0) { printk("Found module %s == %s\n", args->name, lowlib_table[i].name); /* 該当するモジュールを発見した。*/ /* タスクに割り込み処理関数を登録する */ if (lowlib_table[i].intr_func) { if (tskp->n_interrupt >= MAX_MODULE) { return (E_SYS); } tskp->interrupt[tskp->n_interrupt].intr_no = lowlib_table[i].intr; tskp->interrupt[tskp->n_interrupt].intr_func = lowlib_table[i].intr_func; tskp->n_interrupt++; } printk("Registed interrupt functions to the task.\n"); /* lowlib が使用するタスク毎に異なる情報(タスク ID など) の * 領域を設定する。 * 使用する仮想メモリ領域 (LOWLIB_DATA) を物理メモリにマップする。 * あ、その前に Region の設定もする必要があるかも。。 */ if (tskp->n_interrupt == 1) { paddr = vtor(args->task, (UW) LOWLIB_DATA); if (paddr == NULL) { errno = vmap_reg (args->task, LOWLIB_DATA, sizeof (struct lowlib_data), ACC_KERNEL); if (errno) { return (errno); } } else { printk("WARNING: LOWLIB_DATA has already been mapped\n"); } bzero(&ld, sizeof(struct lowlib_data)); errno = vput_reg(args->task, LOWLIB_DATA, sizeof(struct lowlib_data), &ld); if (errno) return(errno); } #ifdef MONAKA plowlib = (struct lowlib_data *)ppage; bzero (plowlib, sizeof (struct lowlib_data)); #endif return (E_OK); } } return (E_PAR); }