# Path: haystack/basicmodel.py
# def get_field_type(record, fieldname):
# def get_fields(record):
# def get_record_type_fields(record_type):
#     def __init__(self, memory_handler, my_constraints, target_ctypes=None):
#     def _get_constraints_for(self, record):
#     def _get_dynamic_constraints_for(self, record):
#     def get_orig_addr(self, record):
#     def is_valid(self, record):
#     def _is_valid_dynamic_constraints(self, record):
#     def _is_valid(self, record, record_constraints):
#     def _is_valid_attr(self, attr, attrname, attrtype, record_constraints):
#     def _is_loadable_member(self, attr, attrname, attrtype):
#     def load_members(self, record, max_depth):
#     def _load_member(self, record, attr, attrname, attrtype, record_constraints, max_depth):
#     def is_valid_address(self, obj, structType=None):
#     def is_valid_address_value(self, addr, structType=None):
#     def __str__(self):
# class CTypesRecordConstraintValidator(interfaces.IRecordConstraintsValidator):
#     MAX_CSTRING_SIZE = 1024
# 
# Path: haystack/constraints.py
# class ConstraintsConfigHandler(interfaces.IConstraintsConfigHandler):
# class ModuleConstraints(interfaces.IModuleConstraints):
# class RecordConstraints(interfaces.IRecordConstraints, dict):
# class IgnoreMember(interfaces.IConstraint):
# class ListLimitDepthValidation(interfaces.IConstraint):
# class RangeValue(interfaces.IConstraint):
# class NotValue(interfaces.IConstraint):
# class NotNullComparable(interfaces.IConstraint):
# class BytesComparable(interfaces.IConstraint):
#     def read(self, filename):
#     def _parse(self, value):
#     def _parse_c(self, value):
#     def _try_numbers(self, _arg):
#     def __init__(self):
#     def get_constraints(self):
#     def set_constraints(self, record_type_name, record_constraints):
#     def get_dynamic_constraints(self):
#     def set_dynamic_constraints(self, record_type_name, record_constraints):
#     def get_fields(self):
#     def get_constraints_for_field(self, field_name):
#     def __contains__(self, obj):
#     def __init__(self, max_depth):
#     def __contains__(self, obj):
#     def __init__(self, low, high):
#     def __contains__(self, obj):
#     def __eq__(self, obj):
#     def __init__(self, not_value):
#     def __contains__(self, obj):
#     def __eq__(self, obj):
#     def __contains__(self, obj):
#     def __eq__(self, obj):
#     def __init__(self, seq):
#     def __contains__(self, obj):
#     def __cmp__(self, obj):


import ctypes
import logging
            import traceback
from haystack import basicmodel
from haystack import constraints
    register_linked_list_field_and_type(struct_Items, 'list_of_items', struct_Items, 'list_of_items')
    register_linked_list_field_and_type(struct_Items2, 'list_of_items', struct_Items2, 'list_of_items')

In case of a single link list:
    register_single_linked_list_record_type(struct_SListEntry, 'next')
    register_linked_list_field_and_type(struct_Items, 'list_of_items', struct_SubItems, 'siblings')
    register_linked_list_field_and_type(struct_SubItems, 'siblings', struct_SubItems, 'siblings')

In the case of a double linked list of siblings:
    register_double_linked_list_record_type(struct_DoubleListEntry, 'next', 'previous')
    register_linked_list_field_and_type(struct_Node, 'list_of_nodes', struct_DoubleListEntry, 'list_of_nodes')

In the case of a double linked list of child elements with siblings:
    register_double_linked_list_record_type(struct_DoubleListEntry, 'next', 'previous')
    register_linked_list_field_and_type(struct_Root, 'children', struct_Child, 'siblings')
    register_linked_list_field_and_type(struct_Child, 'siblings', struct_Child, 'siblings')

In code usage:
use
    _iterate_list_from_field_with_link_info(record, fieldname, sentinel_values)
to iterate on elements of the list.


"""



log = logging.getLogger('listmodel')



# Path: haystack/basicmodel.py
# def get_field_type(record, fieldname):
# def get_fields(record):
# def get_record_type_fields(record_type):
#     def __init__(self, memory_handler, my_constraints, target_ctypes=None):
#     def _get_constraints_for(self, record):
#     def _get_dynamic_constraints_for(self, record):
#     def get_orig_addr(self, record):
#     def is_valid(self, record):
#     def _is_valid_dynamic_constraints(self, record):
#     def _is_valid(self, record, record_constraints):
#     def _is_valid_attr(self, attr, attrname, attrtype, record_constraints):
#     def _is_loadable_member(self, attr, attrname, attrtype):
#     def load_members(self, record, max_depth):
#     def _load_member(self, record, attr, attrname, attrtype, record_constraints, max_depth):
#     def is_valid_address(self, obj, structType=None):
#     def is_valid_address_value(self, addr, structType=None):
#     def __str__(self):
# class CTypesRecordConstraintValidator(interfaces.IRecordConstraintsValidator):
#     MAX_CSTRING_SIZE = 1024
# 
# Path: haystack/constraints.py
# class ConstraintsConfigHandler(interfaces.IConstraintsConfigHandler):
# class ModuleConstraints(interfaces.IModuleConstraints):
# class RecordConstraints(interfaces.IRecordConstraints, dict):
# class IgnoreMember(interfaces.IConstraint):
# class ListLimitDepthValidation(interfaces.IConstraint):
# class RangeValue(interfaces.IConstraint):
# class NotValue(interfaces.IConstraint):
# class NotNullComparable(interfaces.IConstraint):
# class BytesComparable(interfaces.IConstraint):
#     def read(self, filename):
#     def _parse(self, value):
#     def _parse_c(self, value):
#     def _try_numbers(self, _arg):
#     def __init__(self):
#     def get_constraints(self):
#     def set_constraints(self, record_type_name, record_constraints):
#     def get_dynamic_constraints(self):
#     def set_dynamic_constraints(self, record_type_name, record_constraints):
#     def get_fields(self):
#     def get_constraints_for_field(self, field_name):
#     def __contains__(self, obj):
#     def __init__(self, max_depth):
#     def __contains__(self, obj):
#     def __init__(self, low, high):
#     def __contains__(self, obj):
#     def __eq__(self, obj):
#     def __init__(self, not_value):
#     def __contains__(self, obj):
#     def __eq__(self, obj):
#     def __contains__(self, obj):
#     def __eq__(self, obj):
#     def __init__(self, seq):
#     def __contains__(self, obj):
#     def __cmp__(self, obj):


# Path: haystack/listmodel.py
import ctypes
import logging
            import traceback
from haystack import basicmodel
from haystack import constraints

    register_linked_list_field_and_type(struct_Items, 'list_of_items', struct_Items, 'list_of_items')
    register_linked_list_field_and_type(struct_Items2, 'list_of_items', struct_Items2, 'list_of_items')

In case of a single link list:
    register_single_linked_list_record_type(struct_SListEntry, 'next')
    register_linked_list_field_and_type(struct_Items, 'list_of_items', struct_SubItems, 'siblings')
    register_linked_list_field_and_type(struct_SubItems, 'siblings', struct_SubItems, 'siblings')

In the case of a double linked list of siblings:
    register_double_linked_list_record_type(struct_DoubleListEntry, 'next', 'previous')
    register_linked_list_field_and_type(struct_Node, 'list_of_nodes', struct_DoubleListEntry, 'list_of_nodes')

In the case of a double linked list of child elements with siblings:
    register_double_linked_list_record_type(struct_DoubleListEntry, 'next', 'previous')
    register_linked_list_field_and_type(struct_Root, 'children', struct_Child, 'siblings')
    register_linked_list_field_and_type(struct_Child, 'siblings', struct_Child, 'siblings')

In code usage:
use
    _iterate_list_from_field_with_link_info(record, fieldname, sentinel_values)
to iterate on elements of the list.


"""



log = logging.getLogger('listmodel')



class ListModel(basicmodel.CTypesRecordConstraintValidator):