您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ BLK_SKIP函数代码示例

51自学网 2021-06-01 19:51:21
  C++
这篇教程C++ BLK_SKIP函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中BLK_SKIP函数的典型用法代码示例。如果您正苦于以下问题:C++ BLK_SKIP函数的具体用法?C++ BLK_SKIP怎么用?C++ BLK_SKIP使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了BLK_SKIP函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: Find_Key

////  Find_Key: C// // Returns hash index (either the match or the new one).// A return of zero is valid (as a hash index);// // Wide: width of record (normally 2, a key and a value).// // Modes://     0 - search, return hash if found or not//     1 - search, return hash, else return -1 if not//     2 - search, return hash, else append value and return -1//REBINT Find_Key(REBSER *series, REBSER *hser, const REBVAL *key, REBINT wide, REBCNT cased, REBYTE mode){    REBCNT *hashes;    REBCNT skip;    REBCNT hash;    REBCNT len;    REBCNT n;    REBVAL *val;    // Compute hash for value:    len = hser->tail;    hash = Hash_Value(key, len);    if (!hash) fail (Error_Has_Bad_Type(key));    // Determine skip and first index:    skip  = (len == 0) ? 0 : (hash & 0x0000FFFF) % len;    if (skip == 0) skip = 1;    hash = (len == 0) ? 0 : (hash & 0x00FFFF00) % len;    // Scan hash table for match:    hashes = (REBCNT*)hser->data;    if (ANY_WORD(key)) {        while ((n = hashes[hash])) {            val = BLK_SKIP(series, (n-1) * wide);            if (                ANY_WORD(val) &&                (VAL_WORD_SYM(key) == VAL_WORD_SYM(val) ||                (!cased && VAL_WORD_CANON(key) == VAL_WORD_CANON(val)))            ) return hash;            hash += skip;            if (hash >= len) hash -= len;        }    }    else if (ANY_BINSTR(key)) {        while ((n = hashes[hash])) {            val = BLK_SKIP(series, (n-1) * wide);            if (                VAL_TYPE(val) == VAL_TYPE(key)                && 0 == Compare_String_Vals(key, val, (REBOOL)(!IS_BINARY(key) && !cased))            ) return hash;            hash += skip;            if (hash >= len) hash -= len;        }    } else {        while ((n = hashes[hash])) {            val = BLK_SKIP(series, (n-1) * wide);            if (VAL_TYPE(val) == VAL_TYPE(key) && 0 == Cmp_Value(key, val, !cased)) return hash;            hash += skip;            if (hash >= len) hash -= len;        }    }    // Append new value the target series:    if (mode > 1) {        hashes[hash] = SERIES_TAIL(series) + 1;        Append_Values_Len(series, key, wide);    }    return (mode > 0) ? NOT_FOUND : hash;}
开发者ID:fort-ascension,项目名称:ren-c,代码行数:73,


示例2: WORDS_HEAD

*/  REBSER *Merge_Frames(REBSER *parent1, REBSER *parent2)/***      Create a child frame from two parent frames. Merge common fields.**      Values from the second parent take precedence.****		Deep copy and rebind the child.*************************************************************************/{	REBSER *wrds;	REBSER *child;	REBVAL *words;	REBVAL *value;	REBCNT n;	REBINT *binds = WORDS_HEAD(Bind_Table);	// Merge parent1 and parent2 words.	// Keep the binding table.	Collect_Start(BIND_ALL);	// Setup binding table and BUF_WORDS with parent1 words:	if (parent1) Collect_Object(parent1);	// Add parent2 words to binding table and BUF_WORDS:	Collect_Words(BLK_SKIP(FRM_WORD_SERIES(parent2), 1), BIND_ALL);	// Allocate child (now that we know the correct size):	wrds = Copy_Series(BUF_WORDS);	child = Make_Block(SERIES_TAIL(wrds));	value = Append_Value(child);	VAL_SET(value, REB_FRAME);	VAL_FRM_WORDS(value) = wrds;	VAL_FRM_SPEC(value) = 0;	// Copy parent1 values:	COPY_VALUES(FRM_VALUES(parent1)+1, FRM_VALUES(child)+1, SERIES_TAIL(parent1)-1);	// Copy parent2 values:	words = FRM_WORDS(parent2)+1;	value = FRM_VALUES(parent2)+1;	for (; NOT_END(words); words++, value++) {		// no need to search when the binding table is available		n = binds[VAL_WORD_CANON(words)];		BLK_HEAD(child)[n] = *value;	}	// Terminate the child frame:	SERIES_TAIL(child) = SERIES_TAIL(wrds);	BLK_TERM(child);	// Deep copy the child	Copy_Deep_Values(child, 1, SERIES_TAIL(child), TS_CLONE);	// Rebind the child	Rebind_Block(parent1, child, BLK_SKIP(child, 1), REBIND_FUNC);	Rebind_Block(parent2, child, BLK_SKIP(child, 1), REBIND_FUNC | REBIND_TABLE);	// release the bind table 	Collect_End(wrds);	return child;}
开发者ID:dailybarid,项目名称:rebol,代码行数:60,


示例3: same_fields

static REBOOL same_fields(REBSER *tgt, REBSER *src){	struct Struct_Field *tgt_fields = (struct Struct_Field *) SERIES_DATA(tgt);	struct Struct_Field *src_fields = (struct Struct_Field *) SERIES_DATA(src);	REBCNT n;	if (SERIES_TAIL(tgt) != SERIES_TAIL(src)) {		return FALSE;	}	for(n = 0; n < SERIES_TAIL(src); n ++) {		if (tgt_fields[n].type != src_fields[n].type) {			return FALSE;		}		if (VAL_SYM_CANON(BLK_SKIP(PG_Word_Table.series, tgt_fields[n].sym))			!= VAL_SYM_CANON(BLK_SKIP(PG_Word_Table.series, src_fields[n].sym))			|| tgt_fields[n].offset != src_fields[n].offset			|| tgt_fields[n].dimension != src_fields[n].dimension			|| tgt_fields[n].size != src_fields[n].size) {			return FALSE;		}		if (tgt_fields[n].type == STRUCT_TYPE_STRUCT			&& ! same_fields(tgt_fields[n].fields, src_fields[n].fields)) {			return FALSE;		}	}	return TRUE;}
开发者ID:asampal,项目名称:ren-c,代码行数:29,


示例4: Equal_Object

static REBOOL Equal_Object(REBVAL *val, REBVAL *arg){	REBSER *f1;	REBSER *f2;	REBSER *w1;	REBSER *w2;	REBINT n;	if (VAL_TYPE(arg) != VAL_TYPE(val)) return FALSE;	f1 = VAL_OBJ_FRAME(val);	f2 = VAL_OBJ_FRAME(arg);	if (f1 == f2) return TRUE;	if (f1->tail != f2->tail) return FALSE;	w1 = FRM_WORD_SERIES(f1);	w2 = FRM_WORD_SERIES(f2);	if (w1->tail != w2->tail) return FALSE;	// Compare each entry:	for (n = 1; n < (REBINT)(f1->tail); n++) {		if (Cmp_Value(BLK_SKIP(w1, n), BLK_SKIP(w2, n), FALSE)) return FALSE;		// Use Compare_Values();		if (Cmp_Value(BLK_SKIP(f1, n), BLK_SKIP(f2, n), FALSE)) return FALSE;	}	return TRUE;}
开发者ID:51weekend,项目名称:r3,代码行数:28,


示例5: Mold_Block_Series

STOID Mold_Block_Series(REB_MOLD *mold, REBSER *series, REBCNT index, REBYTE *sep){	REBSER *out = mold->series;	REBOOL line_flag = FALSE; // newline was part of block	REBOOL had_lines = FALSE;	REBVAL *value = BLK_SKIP(series, index);	if (!sep) sep = "[]";	if (IS_END(value)) {		Append_Bytes(out, sep);		return;	}	// Recursion check: (variation of: Find_Same_Block(MOLD_LOOP, value))	for (value = BLK_HEAD(MOLD_LOOP); NOT_END(value); value++) {		if (VAL_SERIES(value) == series) {			Emit(mold, "C...C", sep[0], sep[1]);			return;		}	}	value = Append_Value(MOLD_LOOP);	Set_Block(value, series);	if (sep[1]) {		Append_Byte(out, sep[0]);		mold->indent++;	}//	else out->tail--;  // why?????	value = BLK_SKIP(series, index);	while (NOT_END(value)) {		if (VAL_GET_LINE(value)) {			if (sep[1] || line_flag) New_Indented_Line(mold);			had_lines = TRUE;		}		line_flag = TRUE;		Mold_Value(mold, value, TRUE);		value++;		if (NOT_END(value))			Append_Byte(out, (sep[0] == '/') ? '/' : ' ');	}	if (sep[1]) {		mold->indent--;		if (VAL_GET_LINE(value) || had_lines) New_Indented_Line(mold);		Append_Byte(out, sep[1]);	}	Remove_Last(MOLD_LOOP);}
开发者ID:dailybarid,项目名称:rebol,代码行数:51,


示例6: VAL_FUNC_WORDS

*/	REBSER *List_Func_Types(REBVAL *func)/***		Return a block of function arg types.**		Note: skips 0th entry.*************************************************************************/{	REBSER *block;	REBSER *words = VAL_FUNC_WORDS(func);	REBCNT n;	REBVAL *value;	REBVAL *word;	block = Make_Block(SERIES_TAIL(words));	word = BLK_SKIP(words, 1);	for (n = 1; n < SERIES_TAIL(words); word++, n++) {		value = Alloc_Tail_Blk(block);		VAL_SET(value, VAL_TYPE(word));		VAL_WORD_SYM(value) = VAL_BIND_SYM(word);		UNBIND(value);	}	return block;}
开发者ID:draegtun,项目名称:ren-c,代码行数:25,


示例7: VAL_SYM_NAME

*/ RL_API REBYTE *RL_Word_String(u32 word)/***	Return a string related to a given global word identifier.****	Returns:**		A copy of the word string, null terminated.**	Arguments:**		word - a global word identifier**	Notes:**		The result is a null terminated copy of the name for your own use.**		The string is always UTF-8 encoded (chars > 127 are encoded.)**		In this API, word identifiers are always canonical. Therefore,**		the returned string may have different spelling/casing than expected.**		The string is allocated with OS_ALLOC and you can OS_FREE it any time.*************************************************************************/{	REBYTE *s1, *s2;	// !!This code should use a function from c-words.c (but nothing perfect yet.)	if (word == 0 || word >= PG_Word_Table.series->tail) return 0;	s1 = VAL_SYM_NAME(BLK_SKIP(PG_Word_Table.series, word));	s2 = OS_ALLOC_ARRAY(REBYTE, LEN_BYTES(s1) + 1);	COPY_BYTES(s2, s1, LEN_BYTES(s1) + 1);	return s2;}
开发者ID:asampal,项目名称:ren-c,代码行数:25,


示例8: VAL_SYM_NAME

*/	REBYTE *Get_Sym_Name(REBCNT num)/************************************************************************/{	if (num == 0 || num >= PG_Word_Table.series->tail) return (REBYTE*)"???";	return VAL_SYM_NAME(BLK_SKIP(PG_Word_Table.series, num));}
开发者ID:Pointillistic,项目名称:rebol-lang,代码行数:7,


示例9: Expand_Hash

*/	static void Expand_Word_Table(void)/***		Expand the hash table part of the word_table by allocating**		the next larger table size and rehashing all the words of**		the current table.  Free the old hash array.*************************************************************************/{	REBCNT *hashes;	REBVAL *word;	REBINT hash;	REBCNT size;	REBINT skip;	REBCNT n;	// Allocate a new hash table:	Expand_Hash(PG_Word_Table.hashes);	// Debug_Fmt("WORD-TABLE: expanded (%d symbols, %d slots)", PG_Word_Table.series->tail, PG_Word_Table.hashes->tail);	// Rehash all the symbols:	word = BLK_SKIP(PG_Word_Table.series, 1);	hashes = (REBCNT *)PG_Word_Table.hashes->data;	size = PG_Word_Table.hashes->tail;	for (n = 1; n < PG_Word_Table.series->tail; n++, word++) {		hash = Hash_Word(VAL_SYM_NAME(word), -1);		skip  = (hash & 0x0000FFFF) % size;		if (skip == 0) skip = 1;		hash = (hash & 0x00FFFF00) % size;		while (hashes[hash]) {			hash += skip;			if (hash >= (REBINT)size) hash -= size;		}		hashes[hash] = n;	}}
开发者ID:Pointillistic,项目名称:rebol-lang,代码行数:35,


示例10: Construct_Object

*/	void Init_Errors(REBVAL *errors)/************************************************************************/{	REBSER *errs;	REBVAL *val;	// Create error objects and error type objects:	*ROOT_ERROBJ = *Get_System(SYS_STANDARD, STD_ERROR);	errs = Construct_Object(0, VAL_BLK(errors), 0);	Set_Object(Get_System(SYS_CATALOG, CAT_ERRORS), errs);	Set_Root_Series(TASK_ERR_TEMPS, Make_Block(3));	// Create objects for all error types:	for (val = BLK_SKIP(errs, 1); NOT_END(val); val++) {		errs = Construct_Object(0, VAL_BLK(val), 0);		SET_OBJECT(val, errs);	}	// Catch top level errors, to provide decent output:	PUSH_STATE(Top_State, Saved_State);	if (SET_JUMP(Top_State)) {		POP_STATE(Top_State, Saved_State);		DSP++; // Room for return value		Catch_Error(DS_TOP); // Stores error value here		Print_Value(DS_TOP, 0, FALSE);		Crash(RP_NO_CATCH);	}	SET_STATE(Top_State, Saved_State);}
开发者ID:51weekend,项目名称:r3,代码行数:31,


示例11: VAL_INT32

*/	void Set_Error_Type(ERROR_OBJ *error)/***		Sets error type and id fields based on code number.*************************************************************************/{	REBSER *cats;		// Error catalog object	REBSER *cat;		// Error category object	REBCNT n;		// Word symbol number	REBCNT code;	code = VAL_INT32(&error->code);	// Set error category:	n = code / 100 + 1;	cats = VAL_OBJ_FRAME(Get_System(SYS_CATALOG, CAT_ERRORS));	if (code >= 0 && n < SERIES_TAIL(cats) &&		NZ(cat = VAL_SERIES(BLK_SKIP(cats, n)))	) {		Set_Word(&error->type, FRM_WORD_SYM(cats, n), cats, n);		// Find word related to the error itself:				n = code % 100 + 3;		if (n < SERIES_TAIL(cat))			Set_Word(&error->id, FRM_WORD_SYM(cat, n), cat, n);	}}
开发者ID:51weekend,项目名称:r3,代码行数:29,


示例12: Decompress

*/	RL_API int RL_Start(REBYTE *bin, REBINT len, REBCNT flags)/***	Evaluate the default boot function.****	Returns:**		Zero on success, otherwise indicates an error occurred.**	Arguments:**		bin - optional startup code (compressed), can be null**		len - length of above bin**		flags - special flags**	Notes:**		This function completes the startup sequence by calling**		the sys/start function.*************************************************************************/{	REBVAL *val;	REBSER spec = {0};	REBSER *ser;	if (bin) {		spec.data = bin;		spec.tail = len;		ser = Decompress(&spec, 0, -1, 10000000, 0);		if (!ser) return 1;		val = BLK_SKIP(Sys_Context, SYS_CTX_BOOT_HOST);		Set_Binary(val, ser);	}	return Init_Mezz(0);}
开发者ID:MannyZhong,项目名称:r3,代码行数:32,


示例13: Get_System

*/	void Sieve_Ports(REBSER *ports)/***		Remove all ports not found in the WAKE list.**		ports could be NULL, in which case the WAKE list is cleared.*************************************************************************/{	REBVAL *port;	REBVAL *waked;	REBVAL *val;	REBCNT n;	port = Get_System(SYS_PORTS, PORTS_SYSTEM);	if (!IS_PORT(port)) return;	waked = VAL_OBJ_VALUE(port, STD_PORT_DATA);	if (!IS_BLOCK(waked)) return;	for (n = 0; ports && n < SERIES_TAIL(ports);) {		val = BLK_SKIP(ports, n);		if (IS_PORT(val)) {			assert(VAL_TAIL(waked) != 0);			if (VAL_TAIL(waked) == Find_Block_Simple(VAL_SERIES(waked), 0, val)) {//not found				Remove_Series(ports, n, 1);				continue;			}		}		n++;	}	//clear waked list	RESET_SERIES(VAL_SERIES(waked));}
开发者ID:kealist,项目名称:ren-c,代码行数:31,


示例14: Form_Block_Series

STOID Form_Block_Series(REBSER *blk, REBCNT index, REB_MOLD *mold, REBSER *frame){	// Form a series (part_mold means mold non-string values):	REBINT n;	REBINT len = SERIES_TAIL(blk) - index;	REBVAL *val;	REBVAL *wval;	if (len < 0) len = 0;	for (n = 0; n < len;) {		val = BLK_SKIP(blk, index+n);		wval = 0;		if (frame && (IS_WORD(val) || IS_GET_WORD(val))) {			wval = Find_Word_Value(frame, VAL_WORD_SYM(val));			if (wval) val = wval;		}		Mold_Value(mold, val, wval != 0);		n++;		if (GET_MOPT(mold, MOPT_LINES)) {			Append_Byte(mold->series, LF);		}		else {			// Add a space if needed:			if (n < len && mold->series->tail				&& *UNI_LAST(mold->series) != LF				&& !GET_MOPT(mold, MOPT_TIGHT)			)				Append_Byte(mold->series, ' ');		}	}}
开发者ID:dailybarid,项目名称:rebol,代码行数:32,


示例15:

*/	static REBFLG Get_Struct_Var(REBSTU *stu, REBVAL *word, REBVAL *val)/************************************************************************/{	struct Struct_Field *field = NULL;	REBCNT i = 0;	field = (struct Struct_Field *)SERIES_DATA(stu->fields);	for (i = 0; i < SERIES_TAIL(stu->fields); i ++, field ++) {		if (VAL_WORD_CANON(word) == VAL_SYM_CANON(BLK_SKIP(PG_Word_Table.series, field->sym))) {			if (field->array) {				REBSER *ser = Make_Array(field->dimension);				REBCNT n = 0;				for (n = 0; n < field->dimension; n ++) {					REBVAL elem;					get_scalar(stu, field, n, &elem);					Append_Value(ser, &elem);				}				Val_Init_Block(val, ser);			} else {				get_scalar(stu, field, 0, val);			}			return TRUE;		}	}	return FALSE;}
开发者ID:asampal,项目名称:ren-c,代码行数:26,


示例16: BLK_HEAD

*/	static void Trim_Block(REBSER *ser, REBCNT index, REBCNT flags)/***		See Trim_String().*************************************************************************/{	REBVAL *blk = BLK_HEAD(ser);	REBCNT out = index;	REBCNT end = ser->tail;	if (flags & AM_TRIM_TAIL) {		for (; end >= (index+1); end--) {			if (VAL_TYPE(blk+end-1) > REB_NONE) break;		}		Remove_Series(ser, end, ser->tail - end);		if (!(flags & AM_TRIM_HEAD) || index >= end) return;	}	if (flags & AM_TRIM_HEAD) {		for (; index < end; index++) {			if (VAL_TYPE(blk+index) > REB_NONE) break;		}		Remove_Series(ser, out, index - out);	}	if (flags == 0) {		for (; index < end; index++) {			if (VAL_TYPE(blk+index) > REB_NONE) {				*BLK_SKIP(ser, out) = blk[index];				out++;			}		}		Remove_Series(ser, out, end - out);	}}
开发者ID:51weekend,项目名称:r3,代码行数:35,


示例17: VAL_WORD_SYM

*/	REBINT PD_Frame(REBPVS *pvs)/***		pvs->value points to the first value in frame (SELF).*************************************************************************/{	REBCNT sym;	REBCNT s;	REBVAL *word;	REBVAL *val;	if (IS_WORD(pvs->select)) {		sym = VAL_WORD_SYM(pvs->select);		s = SYMBOL_TO_CANON(sym);		word = BLK_SKIP(VAL_FRM_WORDS(pvs->value), 1);		for (val = pvs->value + 1; NOT_END(val); val++, word++) {			if (sym == VAL_BIND_SYM(word) || s == VAL_BIND_CANON(word)) {				if (VAL_GET_OPT(word, OPTS_HIDE)) break;				if (VAL_PROTECTED(word)) Trap1(RE_LOCKED_WORD, word);				pvs->value = val;				return PE_SET;			}		}	}	return PE_BAD_SELECT;}
开发者ID:51weekend,项目名称:r3,代码行数:26,


示例18: BLK_SKIP

*/	void *Use_Port_State(REBSER *port, REBCNT device, REBCNT size)/***		Use private state area in a port. Create if necessary.**		The size is that of a binary structure used by**		the port for storing internal information.*************************************************************************/{	REBVAL *state = BLK_SKIP(port, STD_PORT_STATE);	// If state is not a binary structure, create it:	if (!IS_BINARY(state)) {		REBSER *data = Make_Binary(size);		REBREQ *req = (REBREQ*)STR_HEAD(data);		req->clen = size;		CLEAR(STR_HEAD(data), size);		//data->tail = size; // makes it easier for ACCEPT to clone the port		SET_FLAG(req->flags, RRF_ALLOC); // not on stack		req->port = port;		req->device = device;		Val_Init_Binary(state, data);	}	return (void *)VAL_BIN(state);}
开发者ID:kealist,项目名称:ren-c,代码行数:25,


示例19: BLK_HEAD

*/	REBSER *Check_Func_Spec(REBSER *block)/***		Check function spec of the form:****		["description" arg "notes" [type! type2! ...] /ref ...]****		Throw an error for invalid values.*************************************************************************/{	REBVAL *blk;	REBSER *words;	REBINT n = 0;	REBVAL *value;	blk = BLK_HEAD(block);	words = Collect_Frame(BIND_ALL | BIND_NO_DUP | BIND_NO_SELF, 0, blk);	// !!! needs more checks	for (; NOT_END(blk); blk++) {		switch (VAL_TYPE(blk)) {		case REB_BLOCK:			// Skip the SPEC block as an arg. Use other blocks as datatypes:			if (n > 0) Make_Typeset(VAL_BLK(blk), BLK_SKIP(words, n), 0);			break;		case REB_STRING:		case REB_INTEGER:	// special case used by datatype test actions			break;		case REB_WORD:		case REB_GET_WORD:		case REB_LIT_WORD:			n++;			break;		case REB_REFINEMENT:			// Refinement only allows logic! and none! for its datatype:			n++;			value = BLK_SKIP(words, n);			VAL_TYPESET(value) = (TYPESET(REB_LOGIC) | TYPESET(REB_NONE));			break;		case REB_SET_WORD:		default:			Trap1_DEAD_END(RE_BAD_FUNC_DEF, blk);		}	}	return words; //Create_Frame(words, 0);}
开发者ID:draegtun,项目名称:ren-c,代码行数:47,


示例20: Copy_Values

*/	void Do_Routine(REBVAL *routine)/* */{	//RL_Print("%s, %d/n", __func__, __LINE__);	REBSER *args = Copy_Values(BLK_SKIP(DS_Series, DS_ARG_BASE + 1), SERIES_TAIL(VAL_FUNC_ARGS(routine)) - 1);	Call_Routine(routine, args, DS_OUT);}
开发者ID:draegtun,项目名称:ren-c,代码行数:8,


示例21: VAL_OBJ_WORDS

*/	REBVAL *Obj_Word(REBVAL *value, REBCNT index)/***		Return pointer to the nth WORD of an object.*************************************************************************/{	REBSER *obj = VAL_OBJ_WORDS(value);	return BLK_SKIP(obj, index);}
开发者ID:dailybarid,项目名称:rebol,代码行数:9,


示例22: Rebind_Block

*/  void Rebind_Frame(REBSER *src_frame, REBSER *dst_frame)/***      Clone old src_frame to new dst_frame knowing**		which types of values need to be copied, deep copied, and rebound.*************************************************************************/{	// Rebind all values:	Rebind_Block(src_frame, dst_frame, BLK_SKIP(dst_frame, 1), REBIND_FUNC);}
开发者ID:dailybarid,项目名称:rebol,代码行数:10,


示例23: IS_BLOCK

*/	static REBSER *Init_Loop(REBVAL *spec, REBVAL *body_blk, REBSER **fram)/***		Initialize standard for loops (copy block, make frame, bind).**		Spec: WORD or [WORD ...]*************************************************************************/{	REBSER *frame;	REBINT len;	REBVAL *word;	REBVAL *vals;	REBSER *body;	// For :WORD format, get the var's value:	if (IS_GET_WORD(spec)) spec = Get_Var(spec);	// Hand-make a FRAME (done for for speed):	len = IS_BLOCK(spec) ? VAL_LEN(spec) : 1;	if (len == 0) Trap_Arg(spec);	frame = Make_Frame(len);	SET_SELFLESS(frame);	SERIES_TAIL(frame) = len+1;	SERIES_TAIL(FRM_WORD_SERIES(frame)) = len+1;	// Setup for loop:	word = FRM_WORD(frame, 1); // skip SELF	vals = BLK_SKIP(frame, 1);	if (IS_BLOCK(spec)) spec = VAL_BLK_DATA(spec);	// Optimally create the FOREACH frame:	while (len-- > 0) {		if (!IS_WORD(spec) && !IS_SET_WORD(spec)) {			// Prevent inconsistent GC state:			Free_Series(FRM_WORD_SERIES(frame));			Free_Series(frame);			Trap_Arg(spec);		}		VAL_SET(word, VAL_TYPE(spec));		VAL_BIND_SYM(word) = VAL_WORD_SYM(spec);		VAL_BIND_TYPESET(word) = ALL_64;		word++;		SET_NONE(vals);		vals++;		spec++;	}	SET_END(word);	SET_END(vals);	body = Clone_Block_Value(body_blk);	Bind_Block(frame, BLK_HEAD(body), BIND_DEEP);	*fram = frame;	return body;}
开发者ID:Pointillistic,项目名称:rebol-lang,代码行数:55,


示例24: IS_BLOCK

*/	static REBSER *Init_Loop(const REBVAL *spec, REBVAL *body_blk, REBSER **fram)/***		Initialize standard for loops (copy block, make frame, bind).**		Spec: WORD or [WORD ...]*************************************************************************/{	REBSER *frame;	REBINT len;	REBVAL *word;	REBVAL *vals;	REBSER *body;	// For :WORD format, get the var's value:	if (IS_GET_WORD(spec)) spec = GET_VAR(spec);	// Hand-make a FRAME (done for for speed):	len = IS_BLOCK(spec) ? VAL_LEN(spec) : 1;	if (len == 0) raise Error_Invalid_Arg(spec);	frame = Make_Frame(len, FALSE);	SERIES_TAIL(frame) = len+1;	SERIES_TAIL(FRM_WORD_SERIES(frame)) = len+1;	// Setup for loop:	word = FRM_WORD(frame, 1); // skip SELF	vals = BLK_SKIP(frame, 1);	if (IS_BLOCK(spec)) spec = VAL_BLK_DATA(spec);	// Optimally create the FOREACH frame:	while (len-- > 0) {		if (!IS_WORD(spec) && !IS_SET_WORD(spec)) {			// Prevent inconsistent GC state:			Free_Series(FRM_WORD_SERIES(frame));			Free_Series(frame);			raise Error_Invalid_Arg(spec);		}		Val_Init_Word_Typed(word, VAL_TYPE(spec), VAL_WORD_SYM(spec), ALL_64);		word++;		SET_NONE(vals);		vals++;		spec++;	}	SET_END(word);	SET_END(vals);	body = Copy_Array_At_Deep_Managed(		VAL_SERIES(body_blk), VAL_INDEX(body_blk)	);	Bind_Values_Deep(BLK_HEAD(body), frame);	*fram = frame;	return body;}
开发者ID:kealist,项目名称:ren-c,代码行数:54,


示例25: VAL_OBJ_FRAME

*/	REBVAL *Obj_Value(REBVAL *value, REBCNT index)/***		Return pointer to the nth VALUE of an object.**		Return zero if the index is not valid.*************************************************************************/{	REBSER *obj = VAL_OBJ_FRAME(value);	if (index >= SERIES_TAIL(obj)) return 0;	return BLK_SKIP(obj, index);}
开发者ID:dailybarid,项目名称:rebol,代码行数:12,


示例26: Clone_Function

*/  void Bind_Frame(REBSER *obj)/***      Clone a frame, knowing which types of values need to be**		copied, deep copied, and rebound.*************************************************************************/{	REBVAL *val;	REBOOL funcs = FALSE;	//DISABLE_GC;	// Copy functions:	for (val = BLK_SKIP(obj, 1); NOT_END(val); val++) {		if (IS_FUNCTION(val)) {			Clone_Function(val, val); 			funcs = TRUE;		}		else if (IS_CLOSURE(val)) {			funcs = TRUE;		}	}	// Rebind all values:	Bind_Block(obj, BLK_SKIP(obj, 1), BIND_DEEP | BIND_FUNC);	if (funcs) {		// Rebind functions:		for (val = BLK_SKIP(obj, 1); NOT_END(val); val++) {			if (IS_FUNCTION(val)) {				Bind_Relative(VAL_FUNC_ARGS(val), VAL_FUNC_BODY(val), VAL_FUNC_BODY(val));			}			else if (IS_CLOSURE(val)) {			}		}	}	//ENABLE_GC;}
开发者ID:MannyZhong,项目名称:r3,代码行数:38,


示例27: Find_Word_Index

*/  REBVAL *Find_Word_Value(REBSER *frame, REBCNT sym)/***      Search a frame looking for the given word symbol and**      return the value for the word. Locate it by matching**      the canon word identifiers. Return NULL if not found.*************************************************************************/{	REBINT n;	if (!frame) return 0;	n = Find_Word_Index(frame, sym, FALSE);	if (!n) return 0;	return BLK_SKIP(frame, n);}
开发者ID:dailybarid,项目名称:rebol,代码行数:15,



注:本文中的BLK_SKIP函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ BLOCK函数代码示例
C++ BLI_strdup函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。