# 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
            log.debug('Struct partially LOADED. %s not loaded', record.__class__.__name__)
            return True
        if max_depth > 100:
            raise RuntimeError('max_depth')
        log.debug('-+ <%s> ListModel load_members +- @%x', record.__class__.__name__, record._orig_address_)
        if not super(ListModel, self).load_members(record, max_depth):
            log.debug('basicmodel returned False')
            return False
        # now try to load the list members
        log.debug('d:%d load list elements members recursively on %s @%x ', max_depth, type(record).__name__, record._orig_address_)

        if self.is_single_linked_list_type(type(record)):
            # we cannot devine what the element of the list are gonna be.
            return True
        elif self.is_double_linked_list_type(type(record)):
            # we cannot devine what the element of the list are gonna be.
            return True
        try:
            record_constraints = self._get_constraints_for(record)
            # we look at the list we know about
            for link_info in self._get_list_fields(type(record)):
                attrname = link_info[0]
                ignore = False
                # shorcut ignores
                if attrname in record_constraints:
                    for constraint in record_constraints[attrname]:
                        if constraint is constraints.IgnoreMember:
                            log.debug('ignoring %s as requested', attrname)
                            ignore = True
                            break

# 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

            log.debug('Struct partially LOADED. %s not loaded', record.__class__.__name__)
            return True
        if max_depth > 100:
            raise RuntimeError('max_depth')
        log.debug('-+ <%s> ListModel load_members +- @%x', record.__class__.__name__, record._orig_address_)
        if not super(ListModel, self).load_members(record, max_depth):
            log.debug('basicmodel returned False')
            return False
        # now try to load the list members
        log.debug('d:%d load list elements members recursively on %s @%x ', max_depth, type(record).__name__, record._orig_address_)

        if self.is_single_linked_list_type(type(record)):
            # we cannot devine what the element of the list are gonna be.
            return True
        elif self.is_double_linked_list_type(type(record)):
            # we cannot devine what the element of the list are gonna be.
            return True
        try:
            record_constraints = self._get_constraints_for(record)
            # we look at the list we know about
            for link_info in self._get_list_fields(type(record)):
                attrname = link_info[0]
                ignore = False
                # shorcut ignores
                if attrname in record_constraints:
                    for constraint in record_constraints[attrname]:
                        if constraint is constraints.IgnoreMember:
                            log.debug('ignoring %s as requested', attrname)
                            ignore = True
                            break

                        elif isinstance(constraint, constraints.ListLimitDepthValidation):