static bool export_list(int _iH5File, int *_piVar, char* _pstName, int _iVarType)
{
    int iRet        = 0;
    bool bReturn    = false;
    int iItemNumber = 0;
    SciErr sciErr   = getListItemNumber(pvApiCtx, _piVar, &iItemNumber);
    if (sciErr.iErr)
    {
        printError(&sciErr, 0);
        return false;
    }


    //create groupe name
    char* pstGroupName	= createGroupName(_pstName);

    char pstMsg[256];
    sprintf(pstMsg, "list (%d)", iItemNumber);
    print_type(pstMsg);

    iLevel++;
    //open list
    void *pvList = openList(_iH5File, pstGroupName, iItemNumber);
    for (int i = 0 ; i < iItemNumber ; i++)
    {
        int *piNewVar = NULL;
        getListItemAddress(pvApiCtx, _piVar, i + 1, &piNewVar);//1 indexed
        char* pstPathName   = createPathName(pstGroupName, i);

        if (piNewVar == NULL)
        {
            //undefined item
            bReturn = export_undefined(_iH5File, piNewVar, pstPathName);
        }
        else
        {
            bReturn = export_data(_iH5File, piNewVar, pstPathName);
        }

        iRet = addItemInList(_iH5File, pvList, i, pstPathName);
        FREE(pstPathName);
        if (bReturn == false || iRet)
        {
            return false;
        }
    }
    iLevel--;
    closeList(_iH5File, pvList, _pstName, iItemNumber, _iVarType);
    FREE(pstGroupName);
    //close list
    return true;
}
GLuint GLODMesh::createObject( const LODSettings& lodsettings )
{
    // check if object is already created
    assert( ( _lodGroupName == 0 ) && "LOD object has already been created!" );

    // make a local copy of lod settings object
    _p_lodSettings = new LODSettings( lodsettings );

    // first create a group
    createGroupName();

    _lodObjectName = s_lodObject;
    ++s_lodObject;
    glodNewObject( _lodGroupName, _lodObjectName, _p_lodSettings->getMode() );

    // create one single vertex array out of exsiting triangles and triangle strips
    osg::Vec3Array*  p_vertarray  = new osg::Vec3Array();
    osg::IndexArray* p_indexarray = new osg::UShortArray();

    osg::IndexArray* p_indices  = _p_geometry->getVertexIndices();
    unsigned int     numPrims   = _p_geometry->getNumPrimitiveSets();
    {
        for ( unsigned int primcnt = 0; primcnt < numPrims; ++primcnt )
        {
            osg::PrimitiveSet* p_set = _p_geometry->getPrimitiveSet( primcnt );
            switch( p_set->getMode() )
            {

                case osg::PrimitiveSet::TRIANGLES: 
                    buildObjectTrianlge( p_set, p_indices );
                    break;

                default:
                {
                    log_warning << "unsupported primitive for building LOD, only TRIANGLES supported" << std::endl; 
                    continue;
                }
            }
        }
    }

    return _lodObjectName;
}