Пример #1
0
 static object getByArrayIndex(object value, WmPathItem pathItem, IData origPipe)
 {
     if (pathItem.arrayIndex == -1)
     {
         return(value);
     }
     if ((pathItem.tableIndex != -1) && ((value is Object[][])))
     {
         Object[][] obj        = (Object[][])value;
         int        arrayIndex = pathItem.arrayIndex;
         if (arrayIndex == -2)
         {
             arrayIndex = getIndexFromPipe(pathItem.varArrayIndex, origPipe);
         }
         if (arrayIndex < obj.Length)
         {
             int tableIndex = pathItem.tableIndex;
             if (tableIndex == -2)
             {
                 tableIndex = getIndexFromPipe(pathItem.varTableIndex, origPipe);
             }
             if (tableIndex < obj[arrayIndex].Length)
             {
                 return(obj[arrayIndex][tableIndex]);
             }
             return(null);
         }
     }
     else if ((value is object[]))
     {
         object[] obj   = (object[])value;
         int      index = pathItem.arrayIndex;
         if (index == -2)
         {
             index = getIndexFromPipe(pathItem.varArrayIndex, origPipe);
         }
         if (index < obj.Length)
         {
             return(obj[index]);
         }
         return(null);
     }
     return(null);
 }
Пример #2
0
        public static object get(IData parent, WmPathItem pathItem, bool bestEffort, IData origPipe)
        {
            if ((parent == null) || (pathItem == null))
            {
                return(null);
            }
            Object value = null;

            if (pathItem.pathType == 0)
            {
                IDataCursor cursor = parent.getCursor();
                String      name   = pathItem.name;
                if (cursor.first(name))
                {
                    value = cursor.getValue();
                }
                cursor.destroy();
            }
            else if (pathItem.pathType == 1)
            {
                if (pathItem.position < 0)
                {
                    return(null);
                }
                IDataCursor cursor = parent.getCursor();
                if (seek(cursor, pathItem.position))
                {
                    value = cursor.getValue();
                }
                cursor.destroy();
            }
            else if (pathItem.pathType == 2)
            {
                if (pathItem.position < 0)
                {
                    return(null);
                }
                IDataCursor cursor   = parent.getCursor();
                String      name     = pathItem.name;
                int         position = pathItem.position;


                bool find = true;
                for (int i = 0; i <= position; i++)
                {
                    if (!cursor.next(name))
                    {
                        find = false;
                        break;
                    }
                }
                if (find)
                {
                    value = cursor.getValue();
                }
                cursor.destroy();
            }
            else if (pathItem.pathType == 3)
            {
                return(null);
            }
            if ((!bestEffort) &&
                (!dataCheck(value, pathItem)))
            {
                value = null;
            }
            if ((value is WmIDataList))
            {
                value = ((WmIDataList)value).getItems();
            }
            if (pathItem.arrayIndex == -1)
            {
                return(value);
            }
            return(getByArrayIndex(value, pathItem, origPipe));
        }
Пример #3
0
 private static Object get(IData parent, WmPathItem pathItem, IData origPipe)
 {
     return(get(parent, pathItem, true, origPipe));
 }
Пример #4
0
        private static bool dataCheck(object data, WmPathItem pathItem)
        {
            if ((data is WmIDataList))
            {
                data = ((WmIDataList)data).getItems();
            }
            if (data == null)
            {
                return(true);
            }
            int type = pathItem.type;
            int dim  = pathItem.dim;

            if (type == -1)
            {
                if (dim == 2)
                {
                    return(data is object[][]);
                }
                if (dim == 1)
                {
                    return(data is object[]);
                }
                return(true);
            }
            if (dim == -1)
            {
                if (type == 1)
                {
                    return(((data is string)) || ((data is string[])) || ((data is string[][])));
                }
                if (NSField.isRecordType(type))
                {
                    return(data is IData);
                }
                return(true);
            }
            if ((type == 3) && (dim == 0))
            {
                return(true);
            }
            if (((data is string)) && (type == 1) && (dim == 0))
            {
                return(true);
            }
            if (((data is string[])) && (type == 1) && (dim == 1))
            {
                return(true);
            }
            if (((data is string[][])) && (type == 1) && (dim == 2))
            {
                return(true);
            }
            if (((data is IData)) && (NSField.isRecordType(type)) && (dim == 0))
            {
                return(true);
            }
            if (((data is IData[])) && (NSField.isRecordType(type)) && (dim == 1))
            {
                return(true);
            }
            if (((data is object[])) && (type == 3) && (dim == 1))
            {
                return(true);
            }
            return(false);
        }