class RowMeta implements RowMetaInterface {

  @Override
  public int indexOfValue( String valueName ) {
    if ( valueName == null ) {
      return -1;
    }

    lock.readLock().lock();
    try {
      Integer index = cache.findAndCompare( valueName, valueMetaList );
      for ( int i = 0; ( index == null ) && ( i < valueMetaList.size() ); i++ ) {
        if ( valueName.equalsIgnoreCase( valueMetaList.get( i ).getName() ) ) {
          index = i;
          // it is possible, that several threads can call storing simultaneously
          // but it makes no harm as they will put the same value,
          // because valueMetaList is defended from modifications by read lock
          cache.storeMapping( valueName, index );
        }
      }
      if ( index == null ) {
        return -1;
      }
      return index;
    } finally {
      lock.readLock().unlock();
    }
  }

  public  RowMeta();
  private  RowMeta( RowMeta rowMeta, Integer targetType );
  private  RowMeta( List<ValueMetaInterface> valueMetaList, RowMetaCache rowMetaCache );
  public  RowMeta( DataInputStream inputStream );
  public  RowMeta( Node node );

}