bt2: Adapt test_graph.py and make it pass
[babeltrace.git] / bindings / python / bt2 / bt2 / field_class.py
index cd870ce85f033cdbc77044686a041dd53c30cfef..35dfcdec3f78b8b2451441f91ac3595cca881609 100644 (file)
 
 from bt2 import native_bt, object, utils
 import collections.abc
-import bt2.fields
+import bt2.field
 import abc
 import bt2
 
 
-def _create_from_ptr(ptr):
-    typeid = native_bt.field_class_get_type_id(ptr)
-    return _TYPE_ID_TO_OBJ[typeid]._create_from_ptr(ptr)
+def _create_field_class_from_ptr_and_get_ref(ptr):
+    typeid = native_bt.field_class_get_type(ptr)
+    return _FIELD_CLASS_TYPE_TO_OBJ[typeid]._create_from_ptr_and_get_ref(ptr)
 
 
-class _FieldClass(object._Object, metaclass=abc.ABCMeta):
+class _FieldClass(object._SharedObject, metaclass=abc.ABCMeta):
+    _get_ref = staticmethod(native_bt.field_class_get_ref)
+    _put_ref = staticmethod(native_bt.field_class_put_ref)
+
     def __init__(self, ptr):
         super().__init__(ptr)
 
@@ -68,10 +71,10 @@ class _FieldClass(object._Object, metaclass=abc.ABCMeta):
         if field_ptr is None:
             raise bt2.CreationError('cannot create {} field object'.format(self._NAME.lower()))
 
-        field = bt2.fields._create_from_ptr(field_ptr)
+        field = bt2.field._create_from_ptr(field_ptr)
 
         if value is not None:
-            if not isinstance(field, (bt2.fields._IntegerField, bt2.fields._FloatingPointNumberField, bt2.fields._StringField)):
+            if not isinstance(field, (bt2.field._IntegerField, bt2.field._FloatingPointNumberField, bt2.field._StringField)):
                 raise bt2.Error('cannot assign an initial value to a {} field object'.format(field._NAME))
 
             field.value = value
@@ -107,8 +110,7 @@ class _ByteOrderProp:
         utils._handle_ret(ret, "cannot set field class object's byte order")
 
 
-class IntegerFieldClass(_FieldClass, _AlignmentProp, _ByteOrderProp):
-    _NAME = 'Integer'
+class _IntegerFieldClass(_FieldClass):
 
     def __init__(self, size, alignment=None, byte_order=None, is_signed=None,
                  base=None, encoding=None, mapped_clock_class=None):
@@ -197,8 +199,24 @@ class IntegerFieldClass(_FieldClass, _AlignmentProp, _ByteOrderProp):
         utils._handle_ret(ret, "cannot set integer field class object's mapped clock class")
 
 
-class FloatingPointNumberFieldClass(_FieldClass, _AlignmentProp, _ByteOrderProp):
-    _NAME = 'Floating point number'
+class _UnsignedIntegerFieldClass(_IntegerFieldClass):
+    pass
+
+
+class _SignedIntegerFieldClass(_IntegerFieldClass):
+    pass
+
+
+class UnsignedIntegerFieldClass(_UnsignedIntegerFieldClass):
+    _NAME = 'UnsignedInteger'
+
+
+class SignedIntegerFieldClass(_SignedIntegerFieldClass):
+    _NAME = 'SignedInteger'
+
+
+class RealFieldClass(_FieldClass):
+    _NAME = 'Real'
 
     def __init__(self, alignment=None, byte_order=None, exponent_size=None,
                  mantissa_size=None):
@@ -268,8 +286,8 @@ class _EnumerationFieldClassMapping:
         return (self.name, self.lower, self.upper) == (other.name, other.lower, other.upper)
 
 
-class _EnumerationFieldClassMappingIterator(object._Object,
-                                           collections.abc.Iterator):
+class _EnumerationFieldClassMappingIterator(object._SharedObject,
+                                            collections.abc.Iterator):
     def __init__(self, iter_ptr, is_signed):
         super().__init__(iter_ptr)
         self._is_signed = is_signed
@@ -295,7 +313,7 @@ class _EnumerationFieldClassMappingIterator(object._Object,
         return mapping
 
 
-class EnumerationFieldClass(IntegerFieldClass, collections.abc.Sequence):
+class EnumerationFieldClass(_IntegerFieldClass, collections.abc.Sequence):
     _NAME = 'Enumeration'
 
     def __init__(self, int_field_class=None, size=None, alignment=None,
@@ -482,7 +500,7 @@ class _FieldContainer(collections.abc.Mapping):
     def append_field(self, name, field_class):
         utils._check_str(name)
         utils._check_type(field_class, _FieldClass)
-        ret = self._add_field(field_class._ptr, name)
+        ret = self._add_field(name, field_class._ptr)
         utils._handle_ret(ret, "cannot add field to {} field class object".format(self._NAME.lower()))
 
     def __iadd__(self, fields):
@@ -514,7 +532,7 @@ class _StructureFieldClassFieldIterator(collections.abc.Iterator):
         return name
 
 
-class StructureFieldClass(_FieldClass, _FieldContainer, _AlignmentProp):
+class _StructureFieldClass(_FieldClass, _FieldContainer, _AlignmentProp):
     _NAME = 'Structure'
     _ITER_CLS = _StructureFieldClassFieldIterator
 
@@ -532,9 +550,8 @@ class StructureFieldClass(_FieldClass, _FieldContainer, _AlignmentProp):
     def _get_field_by_name(self, key):
         return native_bt.field_class_structure_get_field_class_by_name(self._ptr, key)
 
-    def _add_field(self, ptr, name):
-        return native_bt.field_class_structure_add_field(self._ptr, ptr,
-                                                        name)
+    def _add_field(self, name, ptr):
+        return native_bt.field_class_structure_append_member(self._ptr, name, ptr)
 
     def _at(self, index):
         if index < 0 or index >= len(self):
@@ -545,8 +562,8 @@ class StructureFieldClass(_FieldClass, _FieldContainer, _AlignmentProp):
         return _create_from_ptr(field_class_ptr)
 
 
-StructureFieldClass.min_alignment = property(fset=StructureFieldClass.alignment.fset)
-StructureFieldClass.alignment = property(fget=StructureFieldClass.alignment.fget)
+_StructureFieldClass.min_alignment = property(fset=_StructureFieldClass.alignment.fset)
+_StructureFieldClass.alignment = property(fget=_StructureFieldClass.alignment.fget)
 
 
 class _VariantFieldClassFieldIterator(collections.abc.Iterator):
@@ -670,5 +687,6 @@ class SequenceFieldClass(_FieldClass):
         return _create_from_ptr(ptr)
 
 
-_TYPE_ID_TO_OBJ = {
+_FIELD_CLASS_TYPE_TO_OBJ = {
+    native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureFieldClass,
 }
This page took 0.038447 seconds and 4 git commands to generate.