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

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

51自学网 2021-06-03 08:41:15
  C++
这篇教程C++ tb_check_break函数代码示例写得很实用,希望能帮到您。

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

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

示例1: tb_object_json_reader_func_null

/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */static tb_object_ref_t tb_object_json_reader_func_null(tb_object_json_reader_t* reader, tb_char_t type){    // check    tb_assert_and_check_return_val(reader && reader->stream, tb_null);    // init data    tb_static_string_t  data;    tb_char_t           buff[256];    if (!tb_static_string_init(&data, buff, 256)) return tb_null;    // done     tb_object_ref_t null = tb_null;    do    {        // append character        tb_static_string_chrcat(&data, type);        // walk        tb_bool_t failed = tb_false;        while (!failed && tb_stream_left(reader->stream))         {            // need one character            tb_byte_t* p = tb_null;            if (!tb_stream_need(reader->stream, &p, 1) && p)             {                failed = tb_true;                break;            }            // the character            tb_char_t ch = *p;            // append character            if (tb_isalpha(ch)) tb_static_string_chrcat(&data, ch);            else break;            // skip it            tb_stream_skip(reader->stream, 1);        }        // failed?        tb_check_break(!failed);        // check        tb_assert_and_check_break(tb_static_string_size(&data));        // trace        tb_trace_d("null: %s", tb_static_string_cstr(&data));        // null?        if (!tb_stricmp(tb_static_string_cstr(&data), "null")) null = tb_object_null_init();    } while (0);    // exit data    tb_static_string_exit(&data);    // ok?    return null;}
开发者ID:richwu,项目名称:tbox,代码行数:63,


示例2: tb_ifaddrs_netlink_socket_init

/* ////////////////////////////////////////////////////////////////////////////////////// * private implementation */static tb_long_t tb_ifaddrs_netlink_socket_init(){    // done    tb_long_t sock = -1;    tb_bool_t ok = tb_false;    do    {        // make socket        sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);        tb_check_break(sock >= 0);        // bind socket        struct sockaddr_nl addr;        memset(&addr, 0, sizeof(addr));        addr.nl_family = AF_NETLINK;        if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) break;        // ok        ok = tb_true;    } while (0);        // failed?    if (!ok)    {        // exit it        if (sock >= 0) close(sock);        sock = -1;    }    // ok?    return sock;}
开发者ID:AlexShiLucky,项目名称:tbox,代码行数:36,


示例3: tb_native_memory_init

/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */tb_bool_t tb_native_memory_init(){       // enter    tb_spinlock_enter_without_profiler(&g_lock);    // done    tb_bool_t ok = tb_false;    do    {        // have been inited?        tb_check_break_state(!g_heap, ok, tb_true);        // make heap        g_heap = (tb_handle_t)HeapCreate(0, 0, 0);        tb_check_break(g_heap);        // ok        ok = tb_true;    } while (0);    // leave    tb_spinlock_leave(&g_lock);    // ok?    return ok;}
开发者ID:siwuxian,项目名称:xmake,代码行数:30,


示例4: tb_directory_home

tb_size_t tb_directory_home(tb_char_t* path, tb_size_t maxn){    // check    tb_assert_and_check_return_val(path && maxn, 0);    // the home directory    tb_bool_t   ok = tb_false;    tb_handle_t pidl = tb_null;    tb_wchar_t  home[TB_PATH_MAXN] = {0};    do    {        // get the appdata folder location        if (S_OK != tb_shell32()->SHGetSpecialFolderLocation(tb_null, 0x1a /* CSIDL_APPDATA */, &pidl)) break;        tb_check_break(pidl);        // get the home directory           if (!tb_shell32()->SHGetPathFromIDListW(pidl, home)) break;        // ok        ok = tb_true;    } while (0);    // exit pidl    if (pidl) GlobalFree(pidl);    pidl = tb_null;    // wtoa    tb_size_t size = ok? tb_wtoa(path, home, maxn) : 0;    // ok?    return size != -1? size : 0;}
开发者ID:waruqi,项目名称:tbox,代码行数:33,


示例5: tb_dns_looker_resp

static tb_long_t tb_dns_looker_resp(tb_dns_looker_impl_t* impl, tb_ipaddr_ref_t addr){    // check    tb_check_return_val(!(impl->step & TB_DNS_LOOKER_STEP_RESP), 1);    // need wait if no data    impl->step &= ~TB_DNS_LOOKER_STEP_NEVT;    // recv response data    tb_byte_t rpkt[4096];    while (1)    {        // read data        tb_long_t read = tb_socket_urecv(impl->sock, tb_null, rpkt, 4096);        //tb_trace_d("read %d", read);        tb_assert_and_check_return_val(read >= 0, -1);        // no data?         if (!read)        {            // end? read x, read 0            tb_check_break(!tb_static_buffer_size(&impl->rpkt));                // abort? read 0, read 0            tb_check_return_val(!impl->tryn, -1);                        // tryn++            impl->tryn++;            // continue             return 0;        }        else impl->tryn = 0;        // copy data        tb_static_buffer_memncat(&impl->rpkt, rpkt, read);    }    // done    if (!tb_dns_looker_resp_done(impl, addr)) return -1;    // check    tb_assert_and_check_return_val(tb_static_string_size(&impl->name) && !tb_ipaddr_ip_is_empty(addr), -1);    // save address to cache    tb_dns_cache_set(tb_static_string_cstr(&impl->name), addr);    // finish it    impl->step |= TB_DNS_LOOKER_STEP_RESP;    impl->tryn = 0;    // reset rpkt    impl->size = 0;    tb_static_buffer_clear(&impl->rpkt);    // ok    tb_trace_d("response: ok");    return 1;}
开发者ID:luxuan,项目名称:tbox,代码行数:59,


示例6: tb_dns_looker_spak

tb_long_t tb_dns_looker_spak(tb_dns_looker_ref_t self, tb_ipaddr_ref_t addr){    // check    tb_dns_looker_t* looker = (tb_dns_looker_t*)self;    tb_assert_and_check_return_val(looker && addr, -1);    // init     tb_long_t r = -1;    do    {        // request        r = tb_dns_looker_reqt(looker);        tb_check_break(r > 0);                    // response        r = tb_dns_looker_resp(looker, addr);        tb_check_break(r > 0);    } while (0);    // failed?    if (r < 0)    {        // next        if (looker->itor + 1 <= looker->maxn) looker->itor++;        else looker->itor = 0;        // has next?        if (looker->itor)        {            // reset step, no event now, need not wait            looker->step = TB_DNS_LOOKER_STEP_NONE | TB_DNS_LOOKER_STEP_NEVT;            // reset rpkt            looker->size = 0;            tb_static_buffer_clear(&looker->rpkt);            // continue             r = 0;        }    }    // ok?    return r;}
开发者ID:waruqi,项目名称:tbox,代码行数:45,


示例7: tb_dns_looker_init

/* ////////////////////////////////////////////////////////////////////////////////////// * interfaces */tb_dns_looker_ref_t tb_dns_looker_init(tb_char_t const* name){    // check    tb_assert_and_check_return_val(name, tb_null);    // must be not address    tb_assert(!tb_ipaddr_ip_cstr_set(tb_null, name, TB_IPADDR_FAMILY_NONE));    // done    tb_bool_t           ok = tb_false;    tb_dns_looker_t*    looker = tb_null;    do    {        // make looker        looker = tb_malloc0_type(tb_dns_looker_t);        tb_assert_and_check_return_val(looker, tb_null);        // dump server//      tb_dns_server_dump();        // get the dns server list        looker->maxn = tb_dns_server_get(looker->list);        tb_check_break(looker->maxn && looker->maxn <= tb_arrayn(looker->list));        // init name        if (!tb_static_string_init(&looker->name, (tb_char_t*)looker->data, TB_DNS_NAME_MAXN)) break;        tb_static_string_cstrcpy(&looker->name, name);        // init rpkt        if (!tb_static_buffer_init(&looker->rpkt, looker->data + TB_DNS_NAME_MAXN, TB_DNS_RPKT_MAXN)) break;        // init family        looker->family = TB_IPADDR_FAMILY_IPV4;        // init sock        looker->sock = tb_socket_init(TB_SOCKET_TYPE_UDP, looker->family);        tb_assert_and_check_break(looker->sock);        // init itor        looker->itor = 1;        // ok        ok = tb_true;    } while (0);    // failed?    if (!ok)    {        // exit it        if (looker) tb_dns_looker_exit((tb_dns_looker_ref_t)looker);        looker = tb_null;    }    // ok?    return (tb_dns_looker_ref_t)looker;}
开发者ID:waruqi,项目名称:tbox,代码行数:60,


示例8: vm86_parser_get_variable_name

/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */tb_bool_t vm86_parser_get_variable_name(tb_char_t const** pp, tb_char_t const* e, tb_char_t* name, tb_size_t maxn){    // check    tb_assert(pp && e && name && maxn);    // done    tb_bool_t           ok = tb_false;    tb_char_t const*    p = *pp;    do    {        // save base        tb_char_t const* b = p;        // check        tb_check_break(p < e && (tb_isalpha(*p) || *p == '_'));        p++;        // get name        while (p < e && (tb_isalpha(*p) || *p == '_' || tb_isdigit(*p))) p++;        tb_check_break(p <= e && p - b < maxn);        tb_memcpy(name, b, p - b);        // end        name[p - b] = '/0';        // skip the space        while (p < e && tb_isspace(*p)) p++;        // ok        ok = tb_true;    } while (0);    // update the code pointer if ok    if (ok) *pp = p;    // ok?    return ok;}
开发者ID:waruqi,项目名称:vm86,代码行数:42,


示例9: tb_thread_pool_task_init

tb_thread_pool_task_ref_t tb_thread_pool_task_init(tb_thread_pool_ref_t pool, tb_char_t const* name, tb_thread_pool_task_done_func_t done, tb_thread_pool_task_exit_func_t exit, tb_cpointer_t priv, tb_bool_t urgent){    // check    tb_thread_pool_impl_t* impl = (tb_thread_pool_impl_t*)pool;    tb_assert_and_check_return_val(impl && done, tb_null);    // init the post size    tb_size_t post_size = 0;    // enter    tb_spinlock_enter(&impl->lock);    // done    tb_bool_t               ok = tb_false;    tb_thread_pool_job_t*   job = tb_null;    do    {        // stoped?        tb_check_break(!impl->bstoped);        // init task        tb_thread_pool_task_t task = {0};        task.name       = name;        task.done       = done;        task.exit       = exit;        task.priv       = priv;        task.urgent     = urgent;        // post task        job = tb_thread_pool_jobs_post_task(impl, &task, &post_size);        tb_assert_and_check_break(job);        // refn++        job->refn++;        // ok        ok = tb_true;    } while (0);    // leave    tb_spinlock_leave(&impl->lock);    // post the workers    if (ok && post_size) tb_thread_pool_worker_post(impl, post_size);    // failed?    else if (!ok) job = tb_null;    // ok?    return (tb_thread_pool_task_ref_t)job;}
开发者ID:luxuan,项目名称:tbox,代码行数:51,


示例10: tb_heap_check

static tb_void_t tb_heap_check(tb_heap_impl_t* impl){    // init    tb_byte_t*  data = impl->data;    tb_size_t   tail = impl->size;    tb_size_t   step = impl->func.size;    tb_size_t   parent = 0;    // walk    for (; parent < tail; parent++)    {           // the left child node        tb_size_t   lchild  = (parent << 1) + 1;        tb_check_break(lchild < tail);        // the parent data        tb_pointer_t parent_data = impl->func.data(&impl->func, data + parent * step);        // check?        if (impl->func.comp(&impl->func, impl->func.data(&impl->func, data + lchild * step), parent_data) < 0)         {            tb_trace_d("lchild[%lu]: invalid, parent: %lu", lchild, parent);            break;        }        // the right child node        tb_size_t   rchild  = (parent << 1) + 2;        tb_check_break(rchild < tail);        // check?        if (impl->func.comp(&impl->func, impl->func.data(&impl->func, data + rchild * step), parent_data) < 0)         {            tb_trace_d("rchild[%lu]: invalid, parent: %lu", rchild, parent);            break;        }    }}
开发者ID:1060460048,项目名称:tbox,代码行数:37,


示例11: tb_fixed_pool_slot_find

static tb_fixed_pool_slot_t* tb_fixed_pool_slot_find(tb_fixed_pool_impl_t* impl, tb_pointer_t data){    // check    tb_assert_and_check_return_val(impl && data, tb_null);    // done    tb_fixed_pool_slot_t* slot = tb_null;    do    {        // belong to the current slot?        if (impl->current_slot && tb_fixed_pool_slot_exists(impl->current_slot, data))        {            slot = impl->current_slot;            break;        }                    // find the slot from the partial slots        tb_for_all_if(tb_fixed_pool_slot_t*, partial_slot, tb_list_entry_itor(&impl->partial_slots), partial_slot)        {            // is this?            if (tb_fixed_pool_slot_exists(partial_slot, data))            {                slot = partial_slot;                break;            }        }                // no found?        tb_check_break(!slot);        // find the slot from the full slots        tb_for_all_if(tb_fixed_pool_slot_t*, full_slot, tb_list_entry_itor(&impl->full_slots), full_slot)        {            // is this?            if (tb_fixed_pool_slot_exists(full_slot, data))            {                slot = full_slot;                break;            }        }    } while (0);    // ok?    return slot;}
开发者ID:1060460048,项目名称:tbox,代码行数:46,


示例12: tb_thread_pool_task_wait_all

tb_long_t tb_thread_pool_task_wait_all(tb_thread_pool_ref_t pool, tb_long_t timeout){    // check    tb_thread_pool_impl_t* impl = (tb_thread_pool_impl_t*)pool;    tb_assert_and_check_return_val(impl, -1);    // wait it    tb_size_t size = 0;    tb_hong_t time = tb_cache_time_spak();    while ((timeout < 0 || tb_cache_time_spak() < time + timeout))    {        // enter        tb_spinlock_enter(&impl->lock);        // the jobs count        size = impl->jobs_pool? tb_fixed_pool_size(impl->jobs_pool) : 0;        // trace        tb_trace_d("wait: jobs: %lu, waiting: %lu, pending: %lu, urgent: %lu: .."                    , size                    , tb_list_entry_size(&impl->jobs_waiting)                    , tb_list_entry_size(&impl->jobs_pending)                     , tb_list_entry_size(&impl->jobs_urgent));#if 0        tb_for_all_if (tb_thread_pool_job_t*, job, tb_list_entry_itor(&impl->jobs_pending), job)        {            tb_trace_d("wait: job: %s from pending", tb_state_cstr(tb_atomic_get(&job->state)));        }#endif        // leave        tb_spinlock_leave(&impl->lock);        // ok?        tb_check_break(size);        // wait some time        tb_msleep(200);    }    // ok?    return !size? 1 : 0;}
开发者ID:luxuan,项目名称:tbox,代码行数:44,


示例13: tb_lo_scheduler_io_loop

static tb_void_t tb_lo_scheduler_io_loop(tb_lo_coroutine_ref_t coroutine, tb_cpointer_t priv){    // check    tb_lo_scheduler_io_ref_t scheduler_io = (tb_lo_scheduler_io_ref_t)priv;    tb_assert(scheduler_io && scheduler_io->poller);    // the scheduler    tb_lo_scheduler_t* scheduler = scheduler_io->scheduler;    tb_assert(scheduler);    // enter coroutine    tb_lo_coroutine_enter(coroutine)    {        // loop        while (!scheduler->stopped)        {            // finish all other ready coroutines first            while (tb_lo_scheduler_ready_count(scheduler) > 1)            {                // yield it                tb_lo_coroutine_yield(); #ifndef TB_CONFIG_MICRO_ENABLE                // spak timer                if (!tb_lo_scheduler_io_timer_spak(scheduler_io)) break;#endif            }            // no more suspended coroutines? loop end            tb_check_break(tb_lo_scheduler_suspend_count(scheduler));            // trace            tb_trace_d("loop: wait %ld ms ..", tb_lo_scheduler_io_timer_delay(scheduler_io));            // no more ready coroutines? wait io events and timers (TODO)            if (tb_poller_wait(scheduler_io->poller, tb_lo_scheduler_io_events, tb_lo_scheduler_io_timer_delay(scheduler_io)) < 0) break; #ifndef TB_CONFIG_MICRO_ENABLE            // spak timer            if (!tb_lo_scheduler_io_timer_spak(scheduler_io)) break;#endif        }    }}
开发者ID:waruqi,项目名称:tbox,代码行数:44,


示例14: tb_timer_task_kill

tb_void_t tb_timer_task_kill(tb_timer_ref_t timer, tb_timer_task_ref_t task){    // check    tb_timer_impl_t*        impl = (tb_timer_impl_t*)timer;    tb_timer_task_impl_t*   task_impl = (tb_timer_task_impl_t*)task;    tb_assert_and_check_return(impl && impl->pool && task_impl);    // trace    tb_trace_d("kill: when: %lld, period: %u, refn: %u", task_impl->when, task_impl->period, task_impl->refn);    // enter    tb_spinlock_enter(&impl->lock);    // done    do    {        // expired or removed?        tb_check_break(task_impl->refn == 2);        // find it        tb_size_t itor = tb_find_all_if(impl->heap, tb_timer_comp_by_task, task_impl);        tb_assert_and_check_break(itor != tb_iterator_tail(impl->heap));        // del this task_impl        tb_heap_del(impl->heap, itor);        // killed        task_impl->killed = 1;        // no repeat        task_impl->repeat = 0;                        // modify when => now        task_impl->when = tb_timer_now(impl);        // re-add task_impl        tb_heap_put(impl->heap, task_impl);    } while (0);    // leave    tb_spinlock_leave(&impl->lock);}
开发者ID:1060460048,项目名称:tbox,代码行数:43,


示例15: tb_demo_database_sql_test_done

/* ////////////////////////////////////////////////////////////////////////////////////// * test */static tb_void_t tb_demo_database_sql_test_done(tb_database_sql_ref_t database, tb_char_t const* sql){    // check    tb_assert_and_check_return(database && sql);    // done    do    {        // done sql        if (!tb_database_sql_done(database, sql))        {            // trace            tb_trace_e("done %s failed, error: %s", sql, tb_state_cstr(tb_database_sql_state(database)));            break ;        }        // load result//      tb_iterator_ref_t result = tb_database_sql_result_load(database, tb_true);        tb_iterator_ref_t result = tb_database_sql_result_load(database, tb_false);        tb_check_break(result);        // trace        tb_trace_i("==============================================================================");        tb_trace_i("row: size: %lu", tb_iterator_size(result));        // walk result        tb_for_all_if (tb_iterator_ref_t, row, result, row)        {            // trace            tb_tracef_i("[row: %lu, col: size: %lu]: ", row_itor, tb_iterator_size(row));            // walk items            tb_for_all_if (tb_database_sql_value_t*, value, row, value)            {                // trace                tb_tracet_i("[%s:%s] ", tb_database_sql_value_name(value), tb_database_sql_value_text(value));            }            // trace            tb_tracet_i(__tb_newline__);        }
开发者ID:richwu,项目名称:tbox,代码行数:44,


示例16: tb_timer_loop

tb_void_t tb_timer_loop(tb_timer_ref_t timer){    // check    tb_timer_impl_t* impl = (tb_timer_impl_t*)timer;    tb_assert_and_check_return(impl);    // work++    tb_atomic_fetch_and_inc(&impl->work);    // init event     tb_spinlock_enter(&impl->lock);    if (!impl->event) impl->event = tb_event_init();    tb_spinlock_leave(&impl->lock);    // loop    while (!tb_atomic_get(&impl->stop))    {        // the delay        tb_size_t delay = tb_timer_delay(timer);        if (delay)        {            // the event            tb_spinlock_enter(&impl->lock);            tb_event_ref_t event = impl->event;            tb_spinlock_leave(&impl->lock);            tb_check_break(event);            // wait some time            if (tb_event_wait(event, delay) < 0) break;        }        // spak ctime        if (impl->ctime) tb_cache_time_spak();        // spak it        if (!tb_timer_spak(timer)) break;    }    // work--    tb_atomic_fetch_and_dec(&impl->work);}
开发者ID:1060460048,项目名称:tbox,代码行数:41,


示例17: vm86_parser_get_instruction_name

tb_bool_t vm86_parser_get_instruction_name(tb_char_t const** pp, tb_char_t const* e, tb_char_t* name, tb_size_t maxn){    // check    tb_assert(pp && e && name && maxn);    // done    tb_bool_t           ok = tb_false;    tb_char_t const*    p = *pp;    do    {        // save base        tb_char_t const* b = p;        // skip name        while (p < e && tb_isalpha(*p)) p++;        tb_check_break(p <= e && p - b < maxn);        // not instruction name?        if (p < e && !tb_isspace(*p)) break;        // save name        tb_memcpy(name, b, p - b);        // end        name[p - b] = '/0';        // skip the space        while (p < e && tb_isspace(*p)) p++;        // ok        ok = tb_true;    } while (0);    // update the code pointer if ok    if (ok) *pp = p;    // ok?    return ok;}
开发者ID:waruqi,项目名称:vm86,代码行数:40,


示例18: tb_regex_replace

tb_char_t const* tb_regex_replace(tb_regex_ref_t self, tb_char_t const* cstr, tb_size_t size, tb_size_t start, tb_char_t const* replace_cstr, tb_size_t replace_size, tb_size_t* plength){    // check    tb_regex_t* regex = (tb_regex_t*)self;    tb_assert_and_check_return_val(regex && regex->code && cstr && replace_cstr, tb_null);    // done    tb_char_t const* result = tb_null;    do    {        // clear length first        if (plength) *plength = 0;        // end?        tb_check_break(start < size);        // init options#ifdef __tb_debug__        tb_uint32_t options = 0;#else        tb_uint32_t options = PCRE2_NO_UTF_CHECK;#endif        if (regex->mode & TB_REGEX_MODE_GLOBAL) options |= PCRE2_SUBSTITUTE_GLOBAL;        // init buffer        if (!regex->buffer_data)        {            regex->buffer_maxn = tb_max(size + replace_size + 64, 256);            regex->buffer_data = (PCRE2_UCHAR*)tb_malloc_bytes(regex->buffer_maxn);        }        tb_assert_and_check_break(regex->buffer_data);        // done        tb_long_t   ok = -1;        PCRE2_SIZE  length = 0;        while (1)        {            // replace it            length = (PCRE2_SIZE)regex->buffer_maxn;            ok = pcre2_substitute(regex->code, (PCRE2_SPTR)cstr, (PCRE2_SIZE)size, (PCRE2_SIZE)start, options, tb_null, tb_null, (PCRE2_SPTR)replace_cstr, (PCRE2_SIZE)replace_size, regex->buffer_data, &length);            // no space?            if (ok == PCRE2_ERROR_NOMEMORY)            {                // grow buffer                regex->buffer_maxn <<= 1;                regex->buffer_data = (PCRE2_UCHAR*)tb_ralloc_bytes(regex->buffer_data, regex->buffer_maxn);                tb_assert_and_check_break(regex->buffer_data);            }            // failed            else if (ok < 0)            {#if defined(__tb_debug__) && !defined(TB_CONFIG_OS_WINDOWS)                // get error info                PCRE2_UCHAR info[256];                pcre2_get_error_message(ok, info, sizeof(info));                // trace                tb_trace_d("replace failed at offset %lu: error: %ld, %s/n", start, ok, info);#endif                // end                break;            }            else break;        }        // check        tb_check_break(ok > 0);        tb_assert_and_check_break(length < regex->buffer_maxn);        // end        regex->buffer_data[length] = '/0';        // trace        tb_trace_d("    replace: [%lu]: %s", length, regex->buffer_data);        // save length         if (plength) *plength = (tb_size_t)length;        // ok        result = (tb_char_t const*)regex->buffer_data;    } while (0);    // ok?    return result;}
开发者ID:waruqi,项目名称:tbox,代码行数:88,


示例19: tb_regex_match

tb_long_t tb_regex_match(tb_regex_ref_t self, tb_char_t const* cstr, tb_size_t size, tb_size_t start, tb_size_t* plength, tb_vector_ref_t* presults){    // check    tb_regex_t* regex = (tb_regex_t*)self;    tb_assert_and_check_return_val(regex && regex->code && regex->match_data && cstr, -1);    // done    tb_long_t ok = -1;    do    {        // clear length first        if (plength) *plength = 0;        // end?        tb_check_break(start < size);        // init options#ifdef __tb_debug__        tb_uint32_t options = 0;#else        tb_uint32_t options = PCRE2_NO_UTF_CHECK;#endif        // match it        tb_long_t count = pcre2_match(regex->code, (PCRE2_SPTR)cstr, (PCRE2_SIZE)size, (PCRE2_SIZE)start, options, regex->match_data, tb_null);        if (count < 0)        {            // no match?            tb_check_break(count != PCRE2_ERROR_NOMATCH);#if defined(__tb_debug__) && !defined(TB_CONFIG_OS_WINDOWS)            // get error info            PCRE2_UCHAR info[256];            pcre2_get_error_message(count, info, sizeof(info));            // trace            tb_trace_d("match failed at offset %lu: error: %ld, %s/n", start, count, info);#endif            // end            break;        }        // check        tb_assertf_and_check_break(count, "ovector has not enough space!");        // get output vector        PCRE2_SIZE* ovector = pcre2_get_ovector_pointer(regex->match_data);        tb_assert_and_check_break(ovector);        // get the match offset and length        tb_size_t offset = (tb_size_t)ovector[0];        tb_size_t length = (tb_size_t)ovector[1] - ovector[0];        tb_assert_and_check_break(offset + length <= size);        // trace        tb_trace_d("matched count: %lu, offset: %lu, length: %lu", count, offset, length);        // save results        if (presults)        {            // init results if not exists            tb_vector_ref_t results = *presults;            if (!results)            {                // init it                if (!regex->results) regex->results = tb_vector_init(16, tb_element_mem(sizeof(tb_regex_match_t), tb_regex_match_exit, tb_null));                // save it                *presults = results = regex->results;            }            tb_assert_and_check_break(results);            // clear it first            tb_vector_clear(results);            // done            tb_long_t           i = 0;            tb_regex_match_t    entry;            for (i = 0; i < count; i++)            {                // get substring offset and length                tb_size_t substr_offset = ovector[i << 1];                tb_size_t substr_length = ovector[(i << 1) + 1] - ovector[i << 1];                tb_assert_and_check_break(substr_offset + substr_length <= size);                // make match entry                entry.cstr  = tb_strndup(cstr + substr_offset, substr_length);                entry.size  = substr_length;                entry.start = substr_offset;                tb_assert_and_check_break(entry.cstr);                                // trace                tb_trace_d("    matched: [%lu, %lu]: %s", entry.start, entry.size, entry.cstr);                // append it                tb_vector_insert_tail(results, &entry);            }            tb_assert_and_check_break(i == count);        }//.........这里部分代码省略.........
开发者ID:waruqi,项目名称:tbox,代码行数:101,


示例20: tb_object_json_reader_func_number

static tb_object_ref_t tb_object_json_reader_func_number(tb_object_json_reader_t* reader, tb_char_t type){    // check    tb_assert_and_check_return_val(reader && reader->stream, tb_null);    // init data    tb_static_string_t  data;    tb_char_t           buff[256];    if (!tb_static_string_init(&data, buff, 256)) return tb_null;    // done    tb_object_ref_t number = tb_null;    do    {        // append character        tb_static_string_chrcat(&data, type);        // walk        tb_bool_t bs = (type == '-')? tb_true : tb_false;        tb_bool_t bf = (type == '.')? tb_true : tb_false;        tb_bool_t failed = tb_false;        while (!failed && tb_stream_left(reader->stream))         {            // need one character            tb_byte_t* p = tb_null;            if (!tb_stream_need(reader->stream, &p, 1) && p)             {                failed = tb_true;                break;            }            // the character            tb_char_t ch = *p;            // is float?            if (!bf && ch == '.') bf = tb_true;            else if (bf && ch == '.')             {                failed = tb_true;                break;            }            // append character            if (tb_isdigit10(ch) || ch == '.' || ch == 'e' || ch == 'E' || ch == '-' || ch == '+')                 tb_static_string_chrcat(&data, ch);            else break;            // skip it            tb_stream_skip(reader->stream, 1);        }        // failed?        tb_check_break(!failed);        // check        tb_assert_and_check_break(tb_static_string_size(&data));        // trace        tb_trace_d("number: %s", tb_static_string_cstr(&data));        // init number #ifdef TB_CONFIG_TYPE_FLOAT        if (bf) number = tb_object_number_init_from_float(tb_stof(tb_static_string_cstr(&data)));#else        if (bf) tb_trace_noimpl();#endif        else if (bs)         {            tb_sint64_t value = tb_stoi64(tb_static_string_cstr(&data));            tb_size_t   bytes = tb_object_need_bytes(-value);            switch (bytes)            {            case 1: number = tb_object_number_init_from_sint8((tb_sint8_t)value); break;            case 2: number = tb_object_number_init_from_sint16((tb_sint16_t)value); break;            case 4: number = tb_object_number_init_from_sint32((tb_sint32_t)value); break;            case 8: number = tb_object_number_init_from_sint64((tb_sint64_t)value); break;            default: break;            }                    }        else         {            tb_uint64_t value = tb_stou64(tb_static_string_cstr(&data));            tb_size_t   bytes = tb_object_need_bytes(value);            switch (bytes)            {            case 1: number = tb_object_number_init_from_uint8((tb_uint8_t)value); break;            case 2: number = tb_object_number_init_from_uint16((tb_uint16_t)value); break;            case 4: number = tb_object_number_init_from_uint32((tb_uint32_t)value); break;            case 8: number = tb_object_number_init_from_uint64((tb_uint64_t)value); break;            default: break;            }        }    } while (0);    // exit data    tb_static_string_exit(&data);    // ok?//.........这里部分代码省略.........
开发者ID:luxuan,项目名称:tbox,代码行数:101,


示例21: tb_file_copy

tb_bool_t tb_file_copy(tb_char_t const* path, tb_char_t const* dest){    // check    tb_assert_and_check_return_val(path && dest, tb_false);#ifdef TB_CONFIG_POSIX_HAVE_COPYFILE    // the full path    tb_char_t full0[TB_PATH_MAXN];    path = tb_path_absolute(path, full0, TB_PATH_MAXN);    tb_assert_and_check_return_val(path, tb_false);    // the dest path    tb_char_t full1[TB_PATH_MAXN];    dest = tb_path_absolute(dest, full1, TB_PATH_MAXN);    tb_assert_and_check_return_val(dest, tb_false);    // attempt to copy it directly    if (!copyfile(path, dest, 0, COPYFILE_ALL)) return tb_true;    else    {        // attempt to copy it again after creating directory        tb_char_t dir[TB_PATH_MAXN];        if (tb_directory_create(tb_path_directory(dest, dir, sizeof(dir))))            return !copyfile(path, dest, 0, COPYFILE_ALL);    }    // failed    return tb_false;#else    tb_int_t    ifd = -1;    tb_int_t    ofd = -1;    tb_bool_t   ok = tb_false;    do    {        // get the absolute source path        tb_char_t data[8192];        path = tb_path_absolute(path, data, sizeof(data));        tb_assert_and_check_break(path);        // get stat.st_mode first#ifdef TB_CONFIG_POSIX_HAVE_STAT64        struct stat64 st = {0};        if (stat64(path, &st)) break;#else        struct stat st = {0};        if (stat(path, &st)) break;#endif        // open source file        ifd = open(path, O_RDONLY);        tb_check_break(ifd >= 0);        // get the absolute source path        dest = tb_path_absolute(dest, data, sizeof(data));        tb_assert_and_check_break(dest);        // open destinate file and copy file mode        ofd = open(dest, O_RDWR | O_CREAT | O_TRUNC, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));        if (ofd < 0)        {            // attempt to open it again after creating directory            tb_char_t dir[TB_PATH_MAXN];            if (tb_directory_create(tb_path_directory(dest, dir, sizeof(dir))))                ofd = open(dest, O_RDWR | O_CREAT | O_TRUNC, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));        }        tb_check_break(ofd >= 0);        // get file size        tb_hize_t size = tb_file_size(tb_fd2file(ifd));        // init write size        tb_hize_t writ = 0;                // attempt to copy file using `sendfile`#ifdef TB_CONFIG_POSIX_HAVE_SENDFILE        while (writ < size)        {            off_t seek = writ;            tb_hong_t real = sendfile(ofd, ifd, &seek, (size_t)(size - writ));            if (real > 0) writ += real;            else break;        }        /* attempt to copy file directly if sendfile failed          *         * sendfile() supports regular file only after "since Linux 2.6.33".         */        if (writ != size)         {            lseek(ifd, 0, SEEK_SET);            lseek(ofd, 0, SEEK_SET);        }        else        {            ok = tb_true;            break;        }#endif//.........这里部分代码省略.........
开发者ID:ljx0305,项目名称:tbox,代码行数:101,



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


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