Exemple #1
0
static int test_create_close(hid_t fid)
{
    herr_t err;
    hid_t table;
    hid_t part_t;

    TESTING("H5PTcreate_fl and H5PTclose");

    /* Create a datatype for the particle struct */
    part_t = make_particle_type();

    HDassert(part_t != -1);

    /* Create the table */
    table = H5PTcreate_fl(fid, PT_NAME, part_t, (hsize_t)100, -1);
    H5Tclose(part_t);
    if( H5PTis_valid(table) < 0)
        goto out;
#ifdef VLPT_REMOVED
    if( H5PTis_varlen(table) != 0)
        goto out;
#endif /* VLPT_REMOVED */

    /* Close the table */
    err = H5PTclose(table);
    if( err < 0)
        goto out;

    PASSED();
    return 0;

out:
    H5_FAILED();
    return -1;
}
Exemple #2
0
/*-------------------------------------------------------------------------
 * test_open
 *
 * Tests opening and closing a FL packet table
 *
 *-------------------------------------------------------------------------
 */
static int test_open(hid_t fid)
{
    herr_t err;
    hid_t table;

    TESTING("H5PTopen");

    /* Open the table */
    table = H5PTopen(fid, PT_NAME);
    if( H5PTis_valid(table) < 0)
        goto out;
#ifdef VLPT_REMOVED
    if( H5PTis_varlen(table) != 0)
        goto out;
#endif /* VLPT_REMOVED */

    /* Close the table */
    err = H5PTclose(table);
    if( err < 0)
        goto out;

    PASSED();
    return 0;

out:
    H5_FAILED();
    return -1;
}
Exemple #3
0
/*-------------------------------------------------------------------------
 * test_open
 *
 * Tests opening and closing a FL packet table
 *
 *-------------------------------------------------------------------------
 */
static int test_open(hid_t fid)
{
    herr_t err;
    hid_t table;

    TESTING("H5PTopen");

    /* Open the table */
    table = H5PTopen(fid, PT_NAME);
    if( H5PTis_valid(table) < 0)
        goto error;
    if( H5PTis_varlen(table) != 0)
        goto error;

    /* Close the table */
    err = H5PTclose(table);
    if( err < 0)
        goto error;

    PASSED();
    return SUCCEED;

error:
      if (table > 0) H5PTclose(table);
      H5_FAILED();
      return FAIL;
}
Exemple #4
0
static int test_create_close(hid_t fid)
{
    herr_t err;
    hid_t table;
    hid_t part_t;

    TESTING("H5PTcreate_fl and H5PTclose");

    /* Create a datatype for the particle struct */
    part_t = make_particle_type();

    HDassert(part_t != -1);

    /* Create the table */
    table = H5PTcreate_fl(fid, PT_NAME, part_t, (hsize_t)100, -1);
    H5Tclose(part_t);
    if( H5PTis_valid(table) < 0)
	goto error;
    if( H5PTis_varlen(table) != 0)
	goto error;

    /* Close the table */
    err = H5PTclose(table);
    if( err < 0)
        goto error;

    PASSED();
    return SUCCEED;

error:
      H5_FAILED();
      return FAIL;
}
/* "Open" Constructor
 * Opens an existing variable-length packet table.
 * Fails if the packet table specified is fixed-length.
 */
VL_PacketTable::VL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name)
{
    if( H5PTis_varlen(table_id) != 1 )    // If this is not a variable-length table
    {
        H5PTclose(table_id);
        table_id = -1;
    }
}
/* "Open" Constructor
 * Opens an existing fixed-length packet table.
 * Fails if the packet table specified is variable-length.
 */
FL_PacketTable::FL_PacketTable(hid_t fileID, const char* name) : PacketTable(fileID, name)
{
#ifdef VLPT_REMOVED
    if( H5PTis_varlen(table_id) != 0 )    // If this is not a fixed-length table
    {
        H5PTclose(table_id);
        table_id = -1;
    }
#endif /* VLPT_REMOVED */
}
Exemple #7
0
/*-------------------------------------------------------------------------
 * test_error
 *
 * ensures that the packet table API throws the correct errors used on
 * objects that are not packet tables.
 *
 *-------------------------------------------------------------------------
 */
static int test_error(hid_t fid)
{
    hid_t id = H5I_BADID;
    int id_open=0;
    particle_t readBuf[1];

    TESTING("error conditions");

    /* Create a HL table */
    if(create_hl_table(fid) < 0)
        goto out;

    /* Try to open things that are not packet tables */
    H5E_BEGIN_TRY
    if(H5PTopen(fid, "Bogus_name") >= 0)
        goto out;
    if(H5PTopen(fid, "group1") >= 0)
        goto out;
    H5E_END_TRY

    /* Try to execute packet table commands on an invalid ID */
    H5E_BEGIN_TRY
    if(H5PTis_valid(id) >= 0)
        goto out;
#ifdef VLPT_REMOVED
    if(H5PTis_varlen(id) >= 0)
        goto out;
#endif /* VLPT_REMOVED */
    if(H5PTclose(id) >= 0)
        goto out;
    if(H5PTappend(id, (size_t)1, testPart) >= 0)
        goto out;
    if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
        goto out;
    if(H5PTcreate_index(id) >= 0)
        goto out;
    if(H5PTset_index(id, (hsize_t)1) >= 0)
        goto out;
    if(H5PTget_index(id, NULL) >= 0)
        goto out;
    H5E_END_TRY

    /* Open a high-level non-packet (H5TB) table and try to */
    /* execute commands on it. */
    if((id=H5Dopen2(fid, H5TB_TABLE_NAME, H5P_DEFAULT)) <0)
        goto out;
    id_open = 1;

    H5E_BEGIN_TRY
    if(H5PTis_valid(id) >= 0)
        goto out;
#ifdef VLPT_REMOVED
    if(H5PTis_varlen(id) >= 0)
        goto out;
#endif /* VLPT_REMOVED */
    if(H5PTclose(id) >= 0)
        goto out;
    if(H5PTappend(id, (size_t)1, testPart) >= 0)
        goto out;
    if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
        goto out;
    if(H5PTcreate_index(id) >= 0)
        goto out;
    if(H5PTset_index(id, (hsize_t)1) >= 0)
        goto out;
    if(H5PTget_index(id, NULL) >= 0)
        goto out;
    H5E_END_TRY

    id_open=0;
    if(H5Dclose(id) <0)
        goto out;

    /* Open and close a packet table.  Try to execute */
    /* commands on the closed ID. */
    if((id=H5PTopen(fid, PT_NAME))<0)
        goto out;
    if(H5PTclose(id) <0)
        goto out;

    H5E_BEGIN_TRY
    if(H5PTis_valid(id) >= 0)
        goto out;
#ifdef VLPT_REMOVED
    if(H5PTis_varlen(id) >= 0)
        goto out;
#endif /* VLPT_REMOVED */
    if(H5PTclose(id) >= 0)
        goto out;
    if(H5PTappend(id, (size_t)1, testPart) >= 0)
        goto out;
    if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
        goto out;
    if(H5PTcreate_index(id) >= 0)
        goto out;
    if(H5PTset_index(id, (hsize_t)1) >= 0)
        goto out;
    if(H5PTget_index(id, NULL) >= 0)
        goto out;
    H5E_END_TRY

    PASSED();
    return 0;

out:
    H5_FAILED();
    if(id_open)
        H5Dclose(id);
    return -1;
}
Exemple #8
0
/*-------------------------------------------------------------------------
 * test_varlen
 *
 * Tests creation, opening, closing, writing, reading, etc. on a
 * variable-length packet table.
 *
 *-------------------------------------------------------------------------
 */
static int    test_varlen(hid_t fid)
{
    herr_t err;
    hid_t table=H5I_BADID;
    hsize_t count;

    /* Buffers to hold data */
    hvl_t writeBuffer[NRECORDS];
    hvl_t readBuffer[NRECORDS];

    /* This example has three different sizes of "record": longs, shorts, and particles */
    long longBuffer[NRECORDS];
    short shortBuffer[NRECORDS];
    int x;

    TESTING("variable-length packet tables");

    /* Initialize buffers */
    for(x=0; x<NRECORDS; x++)
    {
        longBuffer[x] = -x;
        shortBuffer[x] = x;
    }

    /* Fill the write buffer with a mix of variable types */
    for(x=0; x<8; x+=4)
    {
        writeBuffer[x].len = sizeof(long);
        writeBuffer[x].p = &(longBuffer[x]);
        writeBuffer[x+1].len = sizeof(short);
        writeBuffer[x+1].p = &(shortBuffer[x+1]);
        writeBuffer[x+2].len = sizeof(long);
        writeBuffer[x+2].p = &(longBuffer[x+2]);
        writeBuffer[x+3].len = sizeof(particle_t);
        writeBuffer[x+3].p = &(testPart[x+3]);
    }

    /* Create the table */
    table = H5PTcreate_vl(fid, VL_TABLE_NAME, (hsize_t)1001);
    if( H5PTis_valid(table) < 0)
        goto out;
    if( H5PTis_varlen(table) != 1)
        goto out;

    /* Count the number of packets in the table  */
    err = H5PTget_num_packets(table, &count);
    if( err < 0)
        goto out;
    if( count != 0 )
        goto out;

    /* Close the table */
    err = H5PTclose(table);
    if( err < 0)
        goto out;

    /* Re-open the table */
    table = H5PTopen(fid, VL_TABLE_NAME);
    if( H5PTis_valid(table) < 0)
        goto out;
    if( H5PTis_varlen(table) != 1)
        goto out;

    /* Count the number of packets in the table  */
    err = H5PTget_num_packets(table, &count);
    if( err < 0)
        goto out;
    if( count != 0 )
        goto out;

    /* Add several variable-length packets */
    err = H5PTappend(table, (size_t)8, writeBuffer );
    if(err < 0)
        goto out;

    /* Read them back */
    err = H5PTread_packets(table, (hsize_t)0, 4, &(readBuffer[0]));
    if( err < 0)
        goto out;
    err = H5PTread_packets(table, (hsize_t)4, 1, &(readBuffer[4]));
    if( err < 0)
        goto out;
    err = H5PTread_packets(table, (hsize_t)5, (NRECORDS - 5 ), &(readBuffer[5]));
    if( err < 0)
        goto out;

    /* Ensure that packets were read correctly */
    for(x=0; x<NRECORDS; x++)
    {
        if( readBuffer[x].len != writeBuffer[x%4].len)
            goto out;
        switch(x%4)
        {
        case 0:
        case 2:
            if( *((long*)(readBuffer[x].p)) != *((long*)(writeBuffer[x].p)))
                goto out;
            break;
        case 1:
            if( *((short*)(readBuffer[x].p)) != *((short*)(writeBuffer[x].p)))
                goto out;
            break;
        case 3:
            if( cmp_par(0, 0, readBuffer[x].p, writeBuffer[x].p) < 0)
                goto out;
            break;
        default:
            goto out;
        }
    }

    /* Free memory used by read buffer */
    if(H5PTfree_vlen_readbuff(table, NRECORDS, readBuffer) <0)
        goto out;

    /* Read packets back using get_next */
    for(x=0; x < NRECORDS; x++)
    {
        err = H5PTget_next(table, 1, &readBuffer[x]);
        if(err < 0)
            goto out;
    }

    /* Ensure that packets were read correctly */
    for(x=0; x<NRECORDS; x++)
    {
        if( readBuffer[x].len != writeBuffer[x%4].len)
            goto out;
        switch(x%4)
        {
        case 0:
        case 2:
            if( *((long*)(readBuffer[x].p)) != *((long*)(writeBuffer[x].p)))
                goto out;
            break;
        case 1:
            if( *((short*)(readBuffer[x].p)) != *((short*)(writeBuffer[x].p)))
                goto out;
            break;
        case 3:
            if( cmp_par(0, 0, readBuffer[x].p, writeBuffer[x].p) < 0)
                goto out;
            break;
        default:
            goto out;
        }
    }

    /* Free memory used by read buffer */
    if(H5PTfree_vlen_readbuff(table, NRECORDS, readBuffer) <0)
        goto out;

    /* Close the table */
    err = H5PTclose(table);
    if( err < 0)
        goto out;

    PASSED();
    return 0;

out:
    H5_FAILED();
    H5E_BEGIN_TRY
    H5PTclose(table);
    H5E_END_TRY
    return -1;
}
/* IsVariableLength
 * Return 1 if this packet table is a Variable Length packet table,
 * return 0 if it is Fixed Length.  Returns -1 if the table is
 * invalid (not open).
 */
int PacketTable::IsVariableLength()
{
    return H5PTis_varlen(table_id);
}