Пример #1
0
//	////////////////////////////////////////////////////////////////////////////
EndPointIP &EndPointIP::SetAddress(const std::string &in_address)
{
	AddressIP tmp_address(in_address);

	address_ = tmp_address;

	return(*this);
}
Пример #2
0
//	////////////////////////////////////////////////////////////////////////////
EndPointIP &EndPointIP::SetAddress(unsigned long in_address)
{
	AddressIP tmp_address(in_address);

	address_ = tmp_address;

	return(*this);
}
Пример #3
0
//	////////////////////////////////////////////////////////////////////////////
EndPointIP &EndPointIP::SetAddress(const char *in_address)
{
	AddressIP tmp_address(in_address);

	address_ = tmp_address;

	return(*this);
}
Пример #4
0
void Bptree::search_section(Table_info table,Attribute attribute,bool left_open,std::string left,bool right_open,std::string right,Address* begin,Address* end)
{
    uuid_t uu;
    int i;
    uuid_generate( uu );
    printf("\n");
    uuid_string_t  strc;
    uuid_unparse_upper(uu,strc);
    Address begin_address(table.database,strc,0);
    disk.create_file(begin_address);
    get_root(table, attribute);
    Address header_address(table.database,filename,0);
    Address_byte first_address;
    Block header;
    buffer->read_data(header_address, &header);
    header.get_block_data(ADDRESS_SIZE*2, ADDRESS_SIZE, first_address.byte);
    Address now_address(table.database,filename,first_address.address);
    Bptree_node *now_node=new_node();
    now_node->read_from(now_address);
    Key_type *left_key,*right_key;
    Block address_file_block;
    buffer->write_data(begin_address, &address_file_block);
    bool no_left=(left=="inf");
    bool no_right=(right=="inf");
    switch (attribute.type)
    {
        case SQL_INT:left_key=new Int_key;break;
        case SQL_FLOAT:left_key=new Float_key;break;
        case SQL_STRING:left_key=new String_key(attribute.size);break;
    }
    switch (attribute.type)
    {
        case SQL_INT:right_key=new Int_key;break;
        case SQL_FLOAT:right_key=new Float_key;break;
        case SQL_STRING:right_key=new String_key(attribute.size);break;
    }
    left_key->assign(left);
    right_key->assign(right);
    int now_int;
    if (!no_left)
    {
        search(table, attribute, left);
        if (left_open)
        {
            now_address=bigger_than_start_address;
            now_int=bigger_than_start_int;
        }
        else
        {
            now_address=not_smaller_than_start_address;
            now_int=not_smaller_than_start_int;
        }
    }
    else
    {
        now_int=0;
    }
    Address end_address;
    int end_int;
    if (!no_right)
    {
        search(table, attribute, right);
        if (right_open)
        {
            end_address=smaller_than_end_address;
            end_int=smaller_than_end_int;
        }
        else
        {
            end_address=not_bigger_than_end_address;
            end_int=not_bigger_than_end_int;
        }

    }
    else
    {
        end_address=Address(table.table_name,filename,0);
        end_int=0;
    }
    now_node->read_from(now_address);
    Address_byte temp_address;
    temp_address.address=begin_address.address_int();
    bool new_flag=true;
    *begin=Address(table.database,strc,0);
    *end=*begin;
    while(true)
    {
        Address tmp_address(table.database,strc,temp_address.address);
        if (now_address.file_offset==end_address.file_offset && now_int==end_int)
        {
            *end=tmp_address;
            break;
        }
        Block block;
        if (!new_flag)
        {
            buffer->read_data(tmp_address,&block);
        }
        else
        {
            new_flag=false;
        }
        Address_byte to_write_address;
        to_write_address.address=now_node->link[now_int].address_int();
        block.fill_block_data(tmp_address.block_offset, ADDRESS_SIZE, to_write_address.byte);
        buffer->write_data(tmp_address, &block);
        if (now_int+1==now_node->number)
        {
            now_address=now_node->link[now_node->max_count];
            now_int=0;
            if (now_address.file_offset!=0)
                now_node->read_from(now_address);
        }
        else
        {
            now_int++;
        }
        temp_address.address+=ADDRESS_SIZE;
        if (temp_address.address % BLOCK_SIZE==0)
        {
            new_flag=true;
        }
    }
    delete now_node;
    delete right_key;
    delete left_key;
    
}