% LTPDA_OBJ is the abstract ltpda base class.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION:   LTPDA_OBJ is the ltpda base class.
%                This ltpda_obj class is an abstract class and it is not
%                possible to create an instance of this class.
%
% SUPER CLASSES: handle (MATLAB class)
%
% SUB CLASSES:   ltpda_nuc, ltpda_uc
%
% LTPDA_OBJ PROPERTIES:
%
%     Protected Properties (read only)
%
% LTPDA_OBJ METHODS:
%
%     Public Methods
%       eq              - Overloads the == operator for ltpda objects.
%       get             - Get a property of a object.
%       isprop          - Tests if the given field is one of the object
%                         properties.
%       ne              - Overloads the ~= operator for ltpda objects.
%
%     Static Methods
%       SETS            - Retruns the different sets of the constructor
%       getDefaultPlist - Returns the default plsit for the specified set-name
%       getInfo         - Static method to get information of a method
%
%     Abstract Methods
%       char
%       copy
%       display
%
% REMARK:  It is necessary to define the ABSTRACT methods and properties in
%          the sub-classes because if they are not defined is the sub-class
%          as well an abstract class. (See ltpda_nuo)
%
% VERSION:     $Id: ltpda_obj.m,v 1.39 2011/04/27 11:49:39 hewitson Exp $
%
% SEE ALSO:    ltpda_nuo, ltpda_uo, handle
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

classdef (Hidden = true) ltpda_obj < handle

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                            Property definition                            %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %---------- Public (read/write) Properties  ----------
  properties
  end

  %---------- Protected read-only Properties ----------
  properties (SetAccess = protected)
  end

  %---------- Abstract Properties ----------
  properties (Abstract = true, SetAccess = protected)
  end

  %---------- Removed properties ----------
  % We have to define the removed properties as hidden constants.
  % In case of backwards compatibility it is necessary to keep them because
  % MATLAB will read older MAT-files as structures which we have to convert
  % into an object if we make major change to a class.
  % For MATLAB is a major change if we remove a proeprty.
  properties (Constant = true, Hidden = true)
    version = '';
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                          Check property setting                           %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                                Constructor                                %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods
    function obj = ltpda_obj(varargin)
    end
  end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (public)                             %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods (Access = public)
    varargout    = eq(obj1, obj2, varargin)
    varargout    = ne(obj1, obj2, varargin)
    varargout = isprop(varargin)
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (hidden)                             %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods (Hidden = true)
  end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                             Methods (protected)                           %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods (Access = protected)
    varargout = fromStruct(varargin)
    varargout = fromDom(varargin)
  end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (static)                             %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods (Static)

    function ii = getInfo(varargin)
      ii = utils.helper.generic_getInfo(varargin{:}, 'ltpda_obj');
    end

    function out = VEROUT()
      out = '$Id: ltpda_obj.m,v 1.39 2011/04/27 11:49:39 hewitson Exp $';
    end

    function out = SETS()
      out = {};
    end

    function out = getDefaultPlist()
      out = [];
    end

  end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                    Methods (abstract, static, hidden)                     %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods (Abstract, Static = true, Hidden = true)
    varargout = loadobj(varargin)
  end
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %                              Methods (abstract)                           %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  methods (Abstract)
    varargout = char(varargin)
    varargout = copy(varargin)
    txt       = display(varargin)
  end
  
  methods (Abstract = true, Static = true)
    varargout = update_struct(varargin);
  end

end

