# Copyright 2014-2017 Insight Software Consortium.
# Copyright 2004-2009 Roman Yakovenko.
# Distributed under the Boost Software License, Version 1.0.
# See http://www.boost.org/LICENSE_1_0.txt

"""
defines default declarations factory class
"""

from .calldef_members import member_function_t
from .calldef_members import constructor_t
from .calldef_members import destructor_t
from .calldef_members import member_operator_t
from .calldef_members import casting_operator_t
from .comment import comment_t
from .free_calldef import free_function_t
from .free_calldef import free_operator_t
from .enumeration import enumeration_t
from .namespace import namespace_t
from .class_declaration import class_t
from .class_declaration import class_declaration_t
from .typedef import typedef_t
from .variable import variable_t


class decl_factory_t(object):

    """
    declarations factory class
    """

    def __init__(self):
        """creates declarations factory"""
        object.__init__(self)

    def create_member_function(self, *arguments, **keywords):
        """creates instance of class that describes member function
        declaration"""
        return member_function_t(*arguments, **keywords)

    def create_constructor(self, *arguments, **keywords):
        """creates instance of class that describes constructor declaration"""
        return constructor_t(*arguments, **keywords)

    def create_destructor(self, *arguments, **keywords):
        """creates instance of class that describes destructor declaration"""
        return destructor_t(*arguments, **keywords)

    def create_member_operator(self, *arguments, **keywords):
        """creates instance of class that describes member operator
        declaration"""
        return member_operator_t(*arguments, **keywords)

    def create_casting_operator(self, *arguments, **keywords):
        """creates instance of class that describes casting operator
        declaration"""
        return casting_operator_t(*arguments, **keywords)

    def create_free_function(self, *arguments, **keywords):
        """creates instance of class that describes free function
        declaration"""
        return free_function_t(*arguments, **keywords)

    def create_free_operator(self, *arguments, **keywords):
        """creates instance of class that describes free operator
        declaration"""
        return free_operator_t(*arguments, **keywords)

    def create_class_declaration(self, *arguments, **keywords):
        """creates instance of class that describes class declaration"""
        return class_declaration_t(*arguments, **keywords)

    def create_class(self, *arguments, **keywords):
        """creates instance of class that describes class definition
        declaration"""
        return class_t(*arguments, **keywords)

    def create_enumeration(self, *arguments, **keywords):
        """creates instance of class that describes enumeration declaration"""
        return enumeration_t(*arguments, **keywords)

    def create_namespace(self, *arguments, **keywords):
        """creates instance of class that describes namespace declaration"""
        return namespace_t(*arguments, **keywords)

    def create_typedef(self, *arguments, **keywords):
        """creates instance of class that describes typedef declaration"""
        return typedef_t(*arguments, **keywords)

    def create_variable(self, *arguments, **keywords):
        """creates instance of class that describes variable declaration"""
        return variable_t(*arguments, **keywords)

    def create_comment(self, *arguments, **keywords):
        """creates instance of class that describes variable declaration"""
        return comment_t(*arguments, **keywords)
