这篇教程C++ CAMLparam4函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中CAMLparam4函数的典型用法代码示例。如果您正苦于以下问题:C++ CAMLparam4函数的具体用法?C++ CAMLparam4怎么用?C++ CAMLparam4使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了CAMLparam4函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: spoc_cuda_custom_load_param_vecCAMLprim value spoc_cuda_custom_load_param_vec(value off, value ex, value A, value v){ CAMLparam4(off, ex, A, v); CAMLlocal1(customArray); cu_vector* cuv; CUdeviceptr d_A; char *extra; int offset; int seek; int type_size; int tag; void* ptr; seek = Int_val(Field(v,10)); customArray = Field (Field(v, 1), 0); type_size = Int_val(Field(Field(customArray, 1),1)); extra = (char*)ex; offset = Int_val(Field(off, 0)); cuv = (cu_vector*)Field(A, 1); d_A = cuv->cu_vector; ptr = (void*) (size_t) d_A + seek * type_size; ADD_TO_PARAM_BUFFER(ptr, __alignof(d_A)); Store_field(off, 0, Val_int(offset)); CAMLreturn(Val_unit);}
开发者ID:archonSTB,项目名称:SPOC,代码行数:27,
示例2: sunml_spils_qr_solCAMLprim value sunml_spils_qr_sol(value vn, value vh, value vq, value vb){ CAMLparam4(vn, vh, vq, vb); int r; int n = Int_val(vn);#if SUNDIALS_ML_SAFE == 1 struct caml_ba_array *bh = ARRAY2_DATA(vh); intnat hm = bh->dim[1]; intnat hn = bh->dim[0]; if (hn < n + 1) caml_invalid_argument("qr_sol: h is too small (< n + 1)."); if (hm < n) caml_invalid_argument("qr_sol: h is too small (< n)."); if (ARRAY1_LEN(vq) < 2 * n) caml_invalid_argument("qr_sol: q is too small (< 2n)."); if (ARRAY1_LEN(vb) < n + 1) caml_invalid_argument("qr_sol: b is too small (< n + 1).");#endif r = QRsol(n, ARRAY2_ACOLS(vh), REAL_ARRAY(vq), REAL_ARRAY(vb)); if (r != 0) { caml_raise_with_arg(MATRIX_EXN_TAG(ZeroDiagonalElement), Val_long(r)); } CAMLreturn (Val_unit);}
开发者ID:inria-parkas,项目名称:sundialsml,代码行数:30,
示例3: caml_curses_newwinvalue caml_curses_newwin(value nlines, value ncols, value beginy, value beginx) { CAMLparam4(nlines, ncols, beginy, beginx); failwith("No ncurses support enabled"); CAMLreturn(Val_unit);}
开发者ID:camlspotter,项目名称:my-ocaml-win,代码行数:7,
示例4: netsys_openatCAMLprim value netsys_openat(value dirfd, value path, value flags, value perm){#ifdef HAVE_AT CAMLparam4(dirfd, path, flags, perm); int ret, cv_flags; char * p; /* shamelessly copied from ocaml distro */ cv_flags = convert_flag_list(flags, open_flag_table); p = stat_alloc(string_length(path) + 1); strcpy(p, String_val(path)); enter_blocking_section(); ret = openat(Int_val(dirfd), p, cv_flags, Int_val(perm)); leave_blocking_section(); stat_free(p); if (ret == -1) uerror("openat", path);#if defined(NEED_CLOEXEC_EMULATION) && defined(FD_CLOEXEC) if (convert_flag_list(flags, open_cloexec_table) != 0) { int flags = fcntl(Int_val(dirfd), F_GETFD, 0); if (flags == -1 || fcntl(Int_val(dirfd), F_SETFD, flags | FD_CLOEXEC) == -1) uerror("openat", path); }#endif CAMLreturn (Val_int(ret));#else invalid_argument("Netsys_posix.openat not available");#endif}
开发者ID:flashfoxter,项目名称:libres3,代码行数:28,
示例5: caml_mdb_delCAMLprim value caml_mdb_del(value txn,value dbi,value key,value data){ CAMLparam4(txn,dbi,key,data); MDB_val key_,data_; key_.mv_data=String_val(key); key_.mv_size=caml_string_length(key); int ret; if(data ==Val_int(0)){ if((ret=mdb_del( (MDB_txn*)txn, (MDB_dbi) Int_val(dbi), &key_, NULL ))){ if(ret==MDB_NOTFOUND) { static value *exn=NULL; if(exn==NULL) exn=caml_named_value("lmdb_not_found"); caml_raise_constant(*exn); } else caml_failwith("error in mdb_del"); } } else { value x=Field(data,0); data_.mv_data=String_val(x); data_.mv_size=caml_string_length(x); if((ret=mdb_del( (MDB_txn*)txn, (MDB_dbi) Int_val(dbi), &key_, &data_ ))){ caml_failwith("error in mdb_del"); } } CAMLreturn0;}
开发者ID:8l,项目名称:pijul,代码行数:26,
示例6: caml_db_get//+ external get : t -> ?txn:txn -> string -> get_flag list -> string//+ = "caml_db_get"value caml_db_get(value db, value txn_opt, value vkey, value vflags) { CAMLparam4(db, txn_opt, vkey, vflags); DBT key,data; int flags, err; DB_TXN *txn; CAMLlocal1(rval); if (Is_None(txn_opt)) { txn = NULL; } else { test_txn_closed(Some_val(txn_opt)); txn = UW_txn(Some_val(txn_opt)); } test_db_closed(db); zerob(&key,sizeof(DBT)); zerob(&data,sizeof(DBT)); key.data = String_val(vkey); key.size = string_length(vkey); flags = convert_flag_list(vflags, db_get_flags); err = UW_db(db)->get(UW_db(db), txn, &key, &data, flags); if (err != 0) { ////fprintf(stderr,"Error found: %d/n",err); fflush(stderr); if (err == DB_NOTFOUND) { raise_not_found(); } UW_db(db)->err(UW_db(db),err,"caml_db_get"); } // FIX: this currently uses an extra, unnecessary copy in order to simplify // memory management. rval = alloc_string(data.size); memcpy (String_val(rval), data.data, data.size); CAMLreturn (rval);}
开发者ID:jleinenbach,项目名称:GnuKS,代码行数:37,
示例7: caml_cursor_init_both//+ external init_both : t -> key:string -> data:string //+ -> get_flag list -> unit = "caml_cursor_init_both"value caml_cursor_init_both(value cursor, value vkey, value vdata , value vflags ) { CAMLparam4(cursor,vkey,vdata,vflags); DBT key,data; int flags; int err; /* int ctr = 0; */ flags = convert_flag_list(vflags,cursor_get_flags) | DB_GET_BOTH; test_cursor_closed(cursor); zerob(&key,sizeof(DBT)); zerob(&data,sizeof(DBT)); key.data = String_val(vkey); key.size = string_length(vkey); data.data = String_val(vdata); data.size = string_length(vdata); err = UW_cursor(cursor)->c_get(UW_cursor(cursor), &key, &data, flags); if (err != 0) { if (err == DB_NOTFOUND) { raise_not_found (); } raise_db(db_strerror(err)); } CAMLreturn (Val_unit);}
开发者ID:jleinenbach,项目名称:GnuKS,代码行数:31,
示例8: stub_gnttab_map_freshCAMLprim value stub_gnttab_map_fresh( value xgh, value reference, value domid, value writable){ CAMLparam4(xgh, reference, domid, writable); CAMLlocal2(pair, contents); void *map = xc_gnttab_map_grant_ref(_G(xgh), Int_val(domid), Int_val(reference), Bool_val(writable)?PROT_READ | PROT_WRITE:PROT_READ); if(map==NULL) { caml_failwith("Failed to map grant ref"); } contents = caml_ba_alloc_dims(XC_GNTTAB_BIGARRAY, 1, map, 1 << XC_PAGE_SHIFT); pair = caml_alloc_tuple(2); Store_field(pair, 0, contents); /* grant_handle */ Store_field(pair, 1, contents); /* Io_page.t */ CAMLreturn(pair);}
开发者ID:johnelse,项目名称:ocaml-gnt,代码行数:25,
示例9: caml_extunix_renameatCAMLprim value caml_extunix_renameat(value v_oldfd, value v_oldname, value v_newfd, value v_newname){ CAMLparam4(v_oldfd, v_oldname, v_newfd, v_newname); int ret = renameat(Int_val(v_oldfd), String_val(v_oldname), Int_val(v_newfd), String_val(v_newname)); if (ret != 0) uerror("renameat", v_oldname); CAMLreturn(Val_unit);}
开发者ID:bobot,项目名称:extunix,代码行数:7,
示例10: caml_join_cursors//+ external ajoin : ?nosort:bool -> db -> cursor array -> get_flag list ->//+ cursor = "caml_join_cursors"//+ let join ?nosort db cursor_list get_flag_list =//+ ajoin ?nosort db (Array.of_list cursor_list) get_flag_listvalue caml_join_cursors(value vnosort, value db, value vcursors, value vflags) { CAMLparam4(vnosort,db,vcursors,vflags); CAMLlocal1(rval); DBC *jcurs; // pointer to joined cursor int carray_len = Wosize_val(vcursors); int flags = convert_flag_list(vflags,cursor_get_flags); DBC *cursors[carray_len + 1]; int i; if (Is_Some(vnosort) && Bool_val(vnosort)) { flags = flags | DB_JOIN_NOSORT; } for (i=0; i < carray_len; i++) { if (UW_cursor_closed(Field(vcursors,i))) { invalid_argument("caml_join_cursors: Attempt to use closed cursor"); } cursors[i] = UW_cursor(Field(vcursors,i)); } cursors[i] = NULL; test_db_closed(db); UW_db(db)->join(UW_db(db),cursors,&jcurs,flags); rval = alloc_custom(&cursor_custom,Camlcursor_wosize,0,1); UW_cursor(rval) = jcurs; UW_cursor_closed(rval) = False; CAMLreturn (rval);}
开发者ID:jleinenbach,项目名称:GnuKS,代码行数:35,
示例11: caml_vc_recordTypeNvalue caml_vc_recordTypeN(value vc, value fields, value types, value num){ char **fs; Type *ts; int i; CAMLparam4(vc,fields,types,num); CAMLlocal1(result); fs = (char **)malloc(Int_val(num) * sizeof(char *)); if( !fs ) caml_failwith("malloc returned NULL in vc_recordTypeN wrapper"); ts = (Type *)malloc(Int_val(num) * sizeof(Type)); if( !ts ) { free( fs ); caml_failwith("malloc returned NULL in vc_recordTypeN wrapper"); } for( i = 0; i < Int_val(num); i++ ) { fs[i] = String_val(Field(fields,i)); ts[i] = Type_val(Field(types,i)); } result = alloc_Type(vc_recordTypeN(VC_val(vc),fs,ts,Int_val(num))); free(ts); free(fs); CAMLreturn(result);}
开发者ID:spl,项目名称:ivy,代码行数:31,
示例12: caml_ml_inputCAMLprim value caml_ml_input(value vchannel, value buff, value vstart, value vlength){ CAMLparam4 (vchannel, buff, vstart, vlength); struct channel * channel = Channel(vchannel); intnat start, len; int n, avail, nread; Lock(channel); /* We cannot call caml_getblock here because buff may move during caml_do_read */ start = Long_val(vstart); len = Long_val(vlength); n = len >= INT_MAX ? INT_MAX : (int) len; avail = channel->max - channel->curr; if (n <= avail) { memmove(&Byte(buff, start), channel->curr, n); channel->curr += n; } else if (avail > 0) { memmove(&Byte(buff, start), channel->curr, avail); channel->curr += avail; n = avail; } else { nread = caml_do_read(channel->fd, channel->buff, channel->end - channel->buff); channel->offset += nread; channel->max = channel->buff + nread; if (n > nread) n = nread; memmove(&Byte(buff, start), channel->buff, n); channel->curr = channel->buff + n; } Unlock(channel); CAMLreturn (Val_long(n));}
开发者ID:bobzhang,项目名称:ocaml,代码行数:34,
示例13: caml_vc_setStrSeqFlagvalue caml_vc_setStrSeqFlag(value flags, value name, value str, value val){ CAMLparam4(flags,name,str,val); vc_setStrSeqFlag(Flags_val(flags),String_val(name), String_val(val),Int_val(val)); CAMLreturn(Val_unit);}
开发者ID:spl,项目名称:ivy,代码行数:7,
示例14: stub_sockopt_set_sock_keepalivesCAMLprim value stub_sockopt_set_sock_keepalives(value fd, value count, value idle, value interval){ CAMLparam4(fd, count, idle, interval); int c_fd = Int_val(fd); int optval; socklen_t optlen=sizeof(optval); optval = Int_val(count); if(setsockopt(c_fd, TCP_LEVEL, TCP_KEEPCNT, &optval, optlen) < 0) { uerror("setsockopt(TCP_KEEPCNT)", Nothing); }#if defined(__linux__) optval = Int_val(idle); if(setsockopt(c_fd, TCP_LEVEL, TCP_KEEPIDLE, &optval, optlen) < 0) { uerror("setsockopt(TCP_KEEPIDLE)", Nothing); }#endif optval = Int_val(interval); if(setsockopt(c_fd, TCP_LEVEL, TCP_KEEPINTVL, &optval, optlen) < 0) { uerror("setsockopt(TCP_KEEPINTVL)", Nothing); } CAMLreturn(Val_unit);}
开发者ID:Chunjie,项目名称:xenopsd,代码行数:25,
示例15: stub_sha1_updateCAMLprim value stub_sha1_update(value ctx, value data, value ofs, value len){ CAMLparam4(ctx, data, ofs, len); sha1_update(GET_CTX_STRUCT(ctx), String_val(data) + Int_val(ofs), Int_val(len)); CAMLreturn(Val_unit);}
开发者ID:vincenthz,项目名称:ocaml-cryptohash,代码行数:7,
示例16: caml_mdb_cursor_getCAMLprim value caml_mdb_cursor_get(value curs,value key,value data,value op){ CAMLparam4(curs,key,data,op); CAMLlocal3(result,mlkey,mldata); MDB_val key_,data_; key_.mv_data=String_val(key); key_.mv_size=caml_string_length(key); data_.mv_data=String_val(data); data_.mv_size=caml_string_length(data); int ret; if((ret=mdb_cursor_get( (MDB_cursor*)curs, &key_, &data_, Int_val(op) ))){ if(ret==MDB_NOTFOUND) { static value *exn=NULL; if(exn==NULL) exn=caml_named_value("lmdb_not_found"); caml_raise_constant(*exn); } else caml_failwith("error in mdb_cursor_get"); } mlkey=caml_alloc_string(key_.mv_size); memcpy(String_val(mlkey),key_.mv_data,key_.mv_size); mldata=caml_alloc_string(data_.mv_size); memcpy(String_val(mldata),data_.mv_data,data_.mv_size); result=caml_alloc(2,0); Store_field(result,0,mlkey); Store_field(result,1,mldata); CAMLreturn(result);}
开发者ID:8l,项目名称:pijul,代码行数:27,
示例17: caml_drawtextvaluecaml_drawtext(value string, value pos, value matches, value colors) { CAMLparam4(string, pos, matches, colors); size_t size = textw(dc, String_val (string)); int x = Int_val(Field(pos, 0)); if (bottom) /* magic formula */ dc->y = mh - (bh - dc->font.ascent - 1 + Int_val(Field(pos, 1)) * bh); else dc->y = dc->font.ascent+1 + Int_val(Field(pos, 1)) * bh; drawrect(dc, x, dc->y-dc->font.ascent-1, size, bh, True, getcolor(dc, String_val(Field(colors, 2)))); int start, stop; unsigned long fg; int xoff = x + dc->font.height/2; const char *str = String_val (string); value head; while (matches != Val_int(0)) { head = Field (matches, 0); matches = Field (matches, 1); dc->x = xoff; fg = getcolor(dc, String_val(Int_val(Field(head, 0)) == 0 ? Field(colors, 0) : Field(colors, 1))); start = Int_val(Field (head, 1)); stop = Int_val(Field (head, 2)); xoff += drawtext(dc, str, start, stop, fg); } CAMLreturn(Val_int(x + size));}
开发者ID:regnat,项目名称:dmlenu,代码行数:28,
示例18: stub_ba_sendCAMLprim valuestub_ba_send(value fd, value val_buf, value val_ofs, value val_len){ CAMLparam4(fd, val_buf, val_ofs, val_len); int ret = 0;#ifdef WIN32 char *data = (char*)Caml_ba_data_val(val_buf) + Long_val(val_ofs); size_t c_len = Int_val(val_len); SOCKET s = Socket_val(fd); DWORD err = 0; caml_release_runtime_system(); ret = send(s, data, c_len, 0); if (ret == SOCKET_ERROR) err = WSAGetLastError(); caml_acquire_runtime_system(); if (err) { win32_maperr(err); uerror("read", Nothing); }#else caml_failwith("AF_HYPERV only available on Windows");#endif CAMLreturn(Val_int(ret));}
开发者ID:avsm,项目名称:ocaml-hvsock,代码行数:25,
示例19: ml_QObject_connectCAMLprim value ml_QObject_connect (value sender, value signal, value receiver, value member) { CAMLparam4(sender,signal,receiver,member); char *sg = String_val(signal); char *sl = String_val(member); int len1 = strlen(sg), len2 = strlen(sl); char cc1[len1+2]; char cc2[len2+2];// printf("signal = %s, slot = %s/n", sg, sl); cc1[len1+1] = cc2[len2+1] = '/0'; cc1[0] = '2'; cc2[0] = '1'; int i=1; for ( ;i<=len1; ++i) cc1[i] = sg[i-1]; for (i=1;i<=len2; ++i) cc2[i] = sl[i-1];// QString s1 = QString("2%1").arg(QString(sg)),// s2 = QString("1%1").arg(QString(sl));// printf("signal = %s, slot = %s/n", s1.toLocal8Bit().data(), s2.toLocal8Bit().data() );// const char *loc1 = s1.toLocal8Bit().data();// const char *loc2 = s2.toLocal8Bit().data(); printf ("trying to connect %s -> %s/n", cc1, cc2); CAMLreturn( Val_bool (QObject::connect(QObject_val(sender), cc1, QObject_val(receiver), cc2) ) );}
开发者ID:dm04806,项目名称:lablqt,代码行数:28,
示例20: stub_gnttab_map_freshCAMLprim value stub_gnttab_map_fresh(value i, value r, value d, value w){ CAMLparam4(i, r, d, w); /* The OCaml code will never call this because gnttab_allocates is false */ printk("FATAL ERROR: stub_gnttab_map_fresh called/n"); caml_failwith("stub_gnttab_map_fresh");}
开发者ID:GaloisInc,项目名称:mirage-platform,代码行数:7,
示例21: stub_load_rsa_keysCAMLprim value stub_load_rsa_keys(value keys, value cert, value priv, value trustedCA){ CAMLparam4(keys,cert,priv,trustedCA); unsigned char *c_cert = (unsigned char *)strdup(String_val(cert)); unsigned char *c_priv = (unsigned char *)strdup(String_val(priv)); unsigned char *c_trustedCA = (unsigned char *)strdup(String_val(trustedCA)); int cert_len = caml_string_length(cert); int priv_len = caml_string_length(priv); int trustedCA_len = caml_string_length(trustedCA); fprintf(stderr,"Got lens: %d %d %d/n",cert_len,priv_len,trustedCA_len); if(cert_len==0) c_cert=NULL; if(priv_len==0) c_priv=NULL; if(trustedCA_len==0) c_trustedCA=NULL; int rc; rc=matrixSslLoadRsaKeysMem(sslKeys_t_val(keys), c_cert, cert_len, c_priv, priv_len, c_trustedCA, trustedCA_len); if(rc<0) { fprintf(stderr,"rc=%d/n",rc); caml_failwith("Failed to load certificates"); } CAMLreturn(Val_unit);}
开发者ID:StephenMacras,项目名称:dsl-n55u-bender,代码行数:30,
示例22: caml_mdb_env_openCAMLprim value caml_mdb_env_open(value env,value path,value flags,value mode){ CAMLparam4(env,path,flags,mode); if(mdb_env_open((MDB_env*)env,String_val(path),Int_val(flags),Int_val(mode))){ caml_failwith("error in mdb_env_open"); } CAMLreturn(env);}
开发者ID:8l,项目名称:pijul,代码行数:8,
示例23: f_i4_camlvalue f_i4_caml(value i0, value i1, value i2, value i3) { CAMLparam4(i0,i1,i2,i3); int ii0 = Int_val(i0); int ii1 = Int_val(i1); int ii2 = Int_val(i2); int ii3 = Int_val(i3); CAMLreturn(Val_int(f_i4(ii0,ii1,ii2,ii3)));}
开发者ID:Brainiarc7,项目名称:ocaml-ctypes,代码行数:8,
示例24: stub_sha1_updateCAMLprim value stub_sha1_update(value ctx, value data, value ofs, value len){ CAMLparam4(ctx, data, ofs, len); sha1_update(GET_CTX_STRUCT(ctx), (unsigned char *) data + Long_val(ofs), Long_val(len)); CAMLreturn(Val_unit);}
开发者ID:madroach,项目名称:ocaml-sha,代码行数:9,
示例25: cstring_to_binary_arrayCAMLprim value cstring_to_binary_array (value dst_arr, value dst_idx, value dst_len, value src_str){ CAMLparam4 (dst_arr, dst_idx, dst_len, src_str); int len = string_length (src_str), idx = Long_val(dst_idx), dlen = Long_val(dst_len); if (idx + dlen > Bigarray_val(dst_arr)->dim[0] || len > dlen) invalid_argument ("Binarray.write_sz"); memcpy ((char *) Data_bigarray_val(dst_arr) + idx, String_val(src_str), len); memset ((char *) Data_bigarray_val(dst_arr) + idx + len, 0, dlen - len); CAMLreturn (Val_unit);}
开发者ID:AyanamiRei,项目名称:chinesize,代码行数:9,
示例26: hdf5_h5lt_make_datasetvoid hdf5_h5lt_make_dataset(value loc_id_v, value dset_name_v, value type_id_v, value buffer_v){ CAMLparam4(loc_id_v, dset_name_v, type_id_v, buffer_v); struct caml_ba_array *buffer = Caml_ba_array_val(buffer_v); raise_if_fail(H5LTmake_dataset(Hid_val(loc_id_v), String_val(dset_name_v), buffer->num_dims, (const hsize_t*) buffer->dim, Hid_val(type_id_v), buffer->data)); CAMLreturn0;}
开发者ID:vbrankov,项目名称:hdf5-ocaml,代码行数:9,
示例27: stub_utp_writeCAMLprim value stub_utp_write (value socket, value buf, value off, value len){ CAMLparam4(socket, buf, off, len); ssize_t written; written = utp_write (Utp_socket_val (socket), Caml_ba_data_val(buf) + Int_val(off), Int_val(len)); if (written < 0) caml_failwith ("utp_write"); CAMLreturn (Val_int (written));}
开发者ID:nojb,项目名称:ocaml-utp,代码行数:9,
示例28: caml_gnttab_grant_accessCAMLprim valuecaml_gnttab_grant_access(value v_ref, value v_bs, value v_domid, value v_readonly){ CAMLparam4(v_ref, v_bs, v_domid, v_readonly); grant_ref_t ref = Int32_val(v_ref); char *page = String_val(Field(v_bs, 0)) + (Int_val(Field(v_bs,1)) / 8); ASSERT(((unsigned long)page) % PAGE_SIZE == 0); gnttab_grant_access(ref, page, Int_val(v_domid), Bool_val(v_readonly)); CAMLreturn(Val_unit);}
开发者ID:cgreenhalgh,项目名称:mirage,代码行数:10,
示例29: netcgi2_apache_request_outputCAMLprim valuenetcgi2_apache_request_output(value rv, value bufv, value ofsv, value lenv){ CAMLparam4(rv, bufv, ofsv, lenv); request_rec *r = Request_rec_val(rv); int ofs = Int_val(ofsv); int len = Int_val(lenv); int i = ap_rwrite(String_val(bufv) + ofs, len, r); CAMLreturn(Val_int (i));}
开发者ID:marcolinoas,项目名称:libres3,代码行数:10,
注:本文中的CAMLparam4函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ CAMLparam5函数代码示例 C++ CAMLparam3函数代码示例 |