⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_yc_dymemarr.c

📁 一个类STL的多平台可移植的算法容器库,主要用于嵌入式系统编程时的内存管理等方面
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef _MSC_VER
    #pragma warning(disable:4127)
    #pragma warning(disable:4244)
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../../young/youngc.h"

#ifdef  __cplusplus
    using namespace youngc;
#endif

void getline( dymemarray* dstr )
{
    char c = 0;
    int input = 0;
    bool result = true;
    result = result;
    dymemarr_erase_range( dstr, 0, SIZE_MAX );

    if( (input = getchar()) != EOF && input != '\n' )
    {
        c = (char)input;
        DYMEMARR_PUSH_BACK( *dstr, c, char, result );
    }

    while( (input = getchar()) != EOF && input != '\n' )
    {
        c = (char)input;
        DYMEMARR_PUSH_BACK( *dstr, c, char, result );
    }

    DYMEMARR_TO_STRING( *dstr, '0', char );
}

void test_dstring(void)
{
    dymemarray dstr;

    dymemarr_init( &dstr, sizeof(char), pool_alloc, pool_free );
    dymemarr_reserve( &dstr, 255 );
    ylib_memset( dymemarr_begin(&dstr), 0, dymemarr_capacity(&dstr) );

    while( 1 )
    {
        int choice = 0;

        printf( "\n\n" );
        printf( "  1: test dymemarr_init_copy\n" );
        printf( "  2: test dymemarr_assign_copy\n" );
        printf( "  3: test dymemarr_init_move\n" );
        printf( "  4: test dymemarr_assign_move\n" );
        printf( "  5: test dymemarr_reserve\n" );
        printf( "  6: test dymemarr_erase_pos\n" );
        printf( "  7: test dymemarr_erase_range\n" );
        printf( "  8: test dymemarr_insert_value\n" );
        printf( "  9: test dymemarr_insert_array\n" );
        printf( " 10: test dymemarr_push_back\n" );
        printf( " 11: test dymemarr_resize\n" );
        printf( " 12: test dymemarr_replace_fill\n" );
        printf( " 13: test dymemarr_replace_array\n" );
        printf( " 14: test dymemarr_max_size\n" );
        printf( " 15: test dymemarr_size\n" );
        printf( " 16: test dymemarr_capacity\n" );
        printf( " 17: test dymemarr_space\n" );
        printf( " 18: test dymemarr_begin\n" );
        printf( " 19: test dymemarr_end\n" );
        printf( " 20: test dymemarr_front\n" );
        printf( " 21: test dymemarr_back\n" );
        printf( " 22: test dymemarr_index\n" );
        printf( " 23: test dymemarr_at\n" );
        printf( " 24: test dymemarr_pop_back\n" );
        printf( " 25: print string\n" );
        printf( "  0: exit\n\n\n" );

        scanf( "%d", &choice );

        switch( choice )
        {
            case 0:
                goto EXIT;
            case 1:
            {
                dymemarray dstr1;
                dymemarr_init( &dstr1, sizeof(char), pool_alloc, pool_free );
                printf( "please input a string:\n" );
                getline( &dstr );
                if( false == dymemarr_init_copy(&dstr1, &dstr) )
                    printf( "return false!\n" );
                else
                {
                    printf( "src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                    printf( "dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                }
                dymemarr_destroy( &dstr );
                dymemarr_init_copy( &dstr, &dstr1 );
                dymemarr_destroy( &dstr1 );
                break;
            }
            case 2:
            {
                dymemarray dstr1;
                dymemarr_init( &dstr1, sizeof(char), pool_alloc, pool_free );
                dymemarr_reserve( &dstr1, 255 );
                printf( "please input first string:\n" );
                getline( &dstr );
                printf( "please input second string:\n" );
                getline( &dstr1 );
                printf( "before src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "before dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                if( false == dymemarr_assign_copy(&dstr1, &dstr) )
                    printf( "return false!\n" );
                else
                {
                    printf( "after src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                    printf( "after dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                }
                dymemarr_destroy( &dstr );
                dymemarr_assign_copy( &dstr, &dstr1 );
                dymemarr_destroy( &dstr1 );
                break;
            }
            case 3:
            {
                dymemarray dstr1;
                dymemarr_init( &dstr1, sizeof(char), pool_alloc, pool_free );
                printf( "please input a string:\n" );
                getline( &dstr );
                printf( "before src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "before dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                dymemarr_init_move( &dstr1, &dstr );
                printf( "after src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "after dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                dymemarr_destroy( &dstr1 );
                dymemarr_reserve( &dstr, 255 );
                break;
            }
            case 4:
            {
                dymemarray dstr1;
                dymemarr_init( &dstr1, sizeof(char), pool_alloc, pool_free );
                dymemarr_reserve( &dstr1, 255 );
                printf( "please input first string:\n" );
                getline( &dstr );
                printf( "please input second string:\n" );
                getline( &dstr1 );
                printf( "before src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "before dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                dymemarr_assign_move( &dstr1, &dstr );
                printf( "after src: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "after dst: %s\n", (char*)dymemarr_to_string(&dstr1, NULL) );
                dymemarr_destroy( &dstr1 );
                dymemarr_reserve( &dstr, 255 );
                break;
            }
            case 5:
            {
                size_t capa = 0;
                printf( "before length: %u\n", dymemarr_size(&dstr) );
                printf( "before capacity: %u\n", dymemarr_capacity(&dstr) );
                printf( "before string: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "please input new capacity:\n" );
                scanf( "%u", &capa );
                if( false == dymemarr_reserve(&dstr, capa) )
                    printf( "return false!\n" );
                else
                {
                    printf( "after length: %u\n", dymemarr_size(&dstr) );
                    printf( "after capacity: %u\n", dymemarr_capacity(&dstr) );
                    printf( "after string: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                }
                break;
            }
            case 6:
            {
                size_t pos = 0;
                printf( "before string: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "please input index:\n" );
                scanf( "%u", &pos );
                dymemarr_erase_pos( &dstr, pos );
                printf( "after string: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                break;
            }
            case 7:
            {
                size_t first = 0, last = 0;
                printf( "before string: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                printf( "please input first index:\n" );
                scanf( "%u", &first );
                printf( "please input last index:\n" );
                scanf( "%u", &last );
                dymemarr_erase_range( &dstr, first, last );
                printf( "after string: %s\n", (char*)dymemarr_to_string(&dstr, NULL) );
                break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -