You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: cfg_files.m
    path of file: ./repos/bspm/thirdparty/spm8/matlabbatch/@cfg_files
    
    the code of the file until where you have to start completion: function item = cfg_files(varargin)

% This is the file configuration item class
%
% Data structure
% ==============
% Description fields
%    * name  - display name of config item
%    * tag   - tag of the menu item
%    * val   - 1x1 cell array
%    * check - (optional) function handle to implement configuration
%              specific subsasgn checks based on the harvested subtree
%              rooted at this node
%    * help  - help text
% GUI/job manager fields
%    * expanded
%    * hidden
% All fields above are inherited from the generic configuration item class.
%    * filter  - default '.*'
%    * num     - default [0 Inf]
%    * dir     - default ''
%    * ufilter - default '.*'
%    * def
%
% Public Methods
% ==============
%    * get_strings - returns name of object
%    * gettag      - returns tag
%    * help        - returns help text
%    * harvest     - returns item.val{1}, or '<UNDEFINED>' if empty, see below
%    * all_set     - returns ~isempty(item.val), checks numel(item.val{1})
%                    against item.num
%
% Subscript Assignment Checks
% ===========================
% Values assigned to the .num field must be a 2-vector.
% Values assigned to the .val{1} field must be either
% - empty
% - an array of cfg_dep objects
% - a cell string of file names.
% In the latter case, the cell string will be filtered using 
% cfg_getfile('filter', item.val{1}, item.filter, '.*', 1:inf) and only
% files matching item.filter will be assigned.
%
% GUI Input
% =========
% The GUI uses 

    
function item = cfg_files(varargin)

% This is the file configuration item class
%
% Data structure
% ==============
% Description fields
%    * name  - display name of config item
%    * tag   - tag of the menu item
%    * val   - 1x1 cell array
%    * check - (optional) function handle to implement configuration
%              specific subsasgn checks based on the harvested subtree
%              rooted at this node
%    * help  - help text
% GUI/job manager fields
%    * expanded
%    * hidden
% All fields above are inherited from the generic configuration item class.
%    * filter  - default '.*'
%    * num     - default [0 Inf]
%    * dir     - default ''
%    * ufilter - default '.*'
%    * def
%
% Public Methods
% ==============
%    * get_strings - returns name of object
%    * gettag      - returns tag
%    * help        - returns help text
%    * harvest     - returns item.val{1}, or '<UNDEFINED>' if empty, see below
%    * all_set     - returns ~isempty(item.val), checks numel(item.val{1})
%                    against item.num
%
% Subscript Assignment Checks
% ===========================
% Values assigned to the .num field must be a 2-vector.
% Values assigned to the .val{1} field must be either
% - empty
% - an array of cfg_dep objects
% - a cell string of file names.
% In the latter case, the cell string will be filtered using 
% cfg_getfile('filter', item.val{1}, item.filter, '.*', 1:inf) and only
% files matching item.filter will be assigned.
%
% GUI Input
% =========
% The GUI uses 
% cfg_getfile(item.num, item.filter, item.name, item.val{1}, '.', item.ufilter)
% to select files. The filter in item.filter can not be overridden by the
% GUI.
%
% Output in Job Structure (harvest)
% =================================
% cfg_files uses cfg_item/harvest. If multiple depend