Class | RuCodeGen::ClassAttribute |
In: |
lib/rucodegen/value_incapsulator.rb
|
Parent: | Object |
Класс, который описывает один атрибут класса (например, для шаблона ValueIncapsulator).
PRIMITIVE_TYPES | = | Set.new [ "bool", "char", "signed char", "unsigned char", "wchar_t", "short", "short int", "unsigned short", "unsigned short int", "int", "unsigned int", "unsigned", "long", "long int", "unsigned long", "unsigned long int", "long long", "float", "double" ]; | Список типов, которые будут считаться примитивными. |
default | [W] | Начальное значение атрибута. Может быть nil, если начальное значение не задано. |
name | [R] | Имя атрибута. |
type | [R] | Имя типа атрибута. |
Проверка того, является ли тип атрибута примитивным типом. Примитивный тип возвращается getter-ом и передается setter-у по значению. Для примитивного типа инициализитором по умолчанию является 0.
# File lib/rucodegen/value_incapsulator.rb, line 84 def ClassAttribute.is_primitive_type( a_type ) return PRIMITIVE_TYPES.include?( a_type ) end
# File lib/rucodegen/value_incapsulator.rb, line 31 def initialize( a_name, a_type ) @name = a_name @type = a_type @default = nil @getter_returns_value = false end
Получить значение по умолчанию для атрибута.
# File lib/rucodegen/value_incapsulator.rb, line 74 def default return @default if nil != @default return 0 if ClassAttribute.is_primitive_type( type ) fail "Attribute #{name} has no default value" end
Получение имени типа, которое нужно использовать в качестве возвращаемого значения getter-а и в качестве типа аргумента setter-а.
# File lib/rucodegen/value_incapsulator.rb, line 51 def getter_return_type # Если getter возвращает значение, а не ссылку, то все просто. return type if @getter_returns_value # В противном случае придется определять, является ли тип # элементарным типом. return type if ClassAttribute::is_primitive_type( type ) # Нужно возвращать константную ссылку. return "const #{type} &" end
Установить признак того, что getter должен возвращать значение атрибута, а не ссылку на него.
# File lib/rucodegen/value_incapsulator.rb, line 40 def getter_returns_value @getter_returns_value = true end
Определить, есть ли для атрибута инициализатор по-умолчанию. Инициализатор по умолчанию есть, если:
# File lib/rucodegen/value_incapsulator.rb, line 68 def has_default? return true if nil != @default return ClassAttribute.is_primitive_type( type ) end