Exemplo n.º 1
0
        /// <summary>
        /// Inserts an element into the List at the specified index.
        /// </summary>
        /// <param name="index">The zero-based index at which item should be inserted.</param>
        /// <param name="element">The object to insert.</param>
        public unsafe void Insert(int index, t_data_type element)
        {
            if (index < 0 || index > Count)
            {
                throw new IndexOutOfRangeException();
            }
            byte *targetPtr = null;
            {
                MODULE_CALL("PushPointerFromVariable", "$t_data_type", "\"element\"", "\"push\"");
            }
            int size = (int)targetPtr;

            targetPtr = m_ptr;
            IF("%element_fixed");
            targetPtr += index * t_int;
            ELSE();
            for (int i = 0; i < index; i++)
            {
                MODULE_CALL("PushPointerThroughFieldType", "$t_data_type");
            }
            END();
            int offset = (int)(targetPtr - m_ptr);

            // InsertAndRemoveAtCodeForContainer TODO IAccessor reuse
            this.m_ptr          = this.ResizeFunction(this.m_ptr - sizeof(int), offset + sizeof(int), size);
            *(int *)this.m_ptr += size;
            this.m_ptr         += sizeof(int);

            targetPtr = this.m_ptr + offset;
            MODULE_CALL("PushPointerFromVariable", "$t_data_type", "\"element\"", "\"assign\"");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Adds an item to the end of the List
        /// </summary>
        /// <param name="element">The object to be added to the end of the List.</param>
        public unsafe void Add(t_data_type element)
        {
            byte *targetPtr = null;
            {
                MODULE_CALL("PushPointerFromVariable", "$t_data_type", "\"element\"", "\"push\"");
            }

            // TODO AppendCodeForContainer IAccessor code reuse
            int size = (int)targetPtr;

            this.m_ptr          = this.ResizeFunction(this.m_ptr - sizeof(int), *(int *)(this.m_ptr - sizeof(int)) + sizeof(int), size);
            targetPtr           = this.m_ptr + (*(int *)this.m_ptr) + sizeof(int);
            *(int *)this.m_ptr += size;
            this.m_ptr         += sizeof(int);

            MODULE_CALL("PushPointerFromVariable", "$t_data_type", "\"element\"", "\"assign\"");
        }
Exemplo n.º 3
0
Arquivo: Index.cs Projeto: d3m0n5/GDB
        public static bool ElementContainsSubstring(this t_data_type t_list, IEnumerable <string> substrings)
        {
            if (substrings == null || substrings.Count() == 0)
            {
                return(true);
            }
            if (t_list == null)
            {
                throw new ArgumentNullException("list");
            }

            __meta.META_VAR("std::vector<NFieldType*>*", "container_chain", "$t_substring_indexed_list_type->resolve_container_chain()");
            __meta.META_VAR("std::string", "list_name", "\"list\"");
            __meta.META_VAR("int", "iter_value", "0");
            __meta.META("%container_chain->pop_back();");
            __meta.META("%container_chain->pop_back();");
            __meta.MAP_LIST("t_chain", "%container_chain");
            __meta.MAP_VAR("t_list", "%list_name");
            __meta.MAP_VAR("t_element", "\"sublist_\" + GetString(%iter_value)");
            __meta.FOREACH();
            __meta.USE_LIST("t_chain");
            foreach (var t_element in t_list)
            {
                if (t_element == null)
                {
                    continue;
                }
                __meta.META("%list_name = std::string(\"sublist_\") + GetString(%iter_value);");
                __meta.META("++%iter_value;");
                __meta.END();
                foreach (string str in t_list)
                {
                    if (str.Contains(substrings))
                    {
                        return(true);
                    }
                }
                __meta.FOREACH();
                __meta.USE_LIST("t_chain");
            }
            __meta.END();
            return(false);
        }
        internal static unsafe bool TryParse_t_data_type_display(string s, out t_data_type value)
        {
            t_data_type_remove_nullable value_type_value;
            JArray jarray;

            IF("$t_data_type->is_bool()");
            {
                IF("$t_data_type->is_nullable()");
                {
                    if (string.IsNullOrEmpty(s) || string.Compare(s, "null", ignoreCase: true) == 0)
                    {
                        value = default(t_data_type);
                        return(true);
                    }
                }
                END();

                double double_val;

                if (t_data_type_remove_nullable.TryParse(s, out value_type_value))
                {
                    value = value_type_value;
                    return(true);
                }
                else if (double.TryParse(s, out double_val))
                {
                    LITERAL_OUTPUT("value = (double_val != 0);");
                    MUTE();
                    value = value_type_value;
                    MUTE_END();
                    return(true);
                }
                else
                {
                    value = default(t_data_type);
                    return(false);
                }
            }
            ELIF("$t_data_type->is_datetime()");
            {
                IF("$t_data_type->is_nullable()");
                {
                    if (string.IsNullOrEmpty(s) || string.Compare(s, "null", ignoreCase: true) == 0)
                    {
                        value = default(t_data_type);
                        return(true);
                    }
                }
                END();
                if (t_data_type_remove_nullable.TryParse(s, null, System.Globalization.DateTimeStyles.RoundtripKind, out value_type_value))
                {
                    value = value_type_value;
                    return(true);
                }
                //special case for non-standard date time strings
                if (s.EndsWith(" UTC", StringComparison.Ordinal) && t_data_type_remove_nullable.TryParse(s.Substring(0, s.Length - 4) + 'Z', null, System.Globalization.DateTimeStyles.RoundtripKind, out value_type_value))
                {
                    //replace " UTC" with "Z"
                    value = value_type_value;
                    return(true);
                }

                value = default(t_data_type);
                return(false);
            }
            ELIF("$t_data_type->is_nullable() /* and has built-in TryParse */");
            if (string.IsNullOrEmpty(s) || string.Compare(s, "null", ignoreCase: true) == 0)
            {
                value = default(t_data_type);
                return(true);
            }
            else if (t_data_type_remove_nullable.TryParse(s, out value_type_value))
            {
                value = value_type_value;
                return(true);
            }
            else
            {
                value = default(t_data_type);
                return(false);
            }
            ELIF("$t_data_type->is_array()");
            try
            {
                MUTE();
                //Just to make csc happy with the meta template.
                value = default(t_data_type);
                int    t_array_iterator_length = 1;
                string element = "";
                MUTE_END();
                jarray = JArray.Parse(s);
                //There are some situations that our template system doesn't work...
                //So we use LITERAL_OUTPUT to output something hard to express
                LITERAL_OUTPUT("value = new "); META_OUTPUT("data_type_get_array_type_with_size_string($t_data_type)"); LITERAL_OUTPUT(";");

                META_OUTPUT("$t_data_type_array_element_type"); LITERAL_OUTPUT(" element;");
                int t_array_iterator_prefix_offset = 0;
                FOREACH();
                for (int t_array_iterator_string = 0; t_array_iterator_string < t_array_iterator_length; ++t_array_iterator_string)
                /*END*/
                {
                    IF("data_type_need_external_parser($t_data_type_array_element_type)");
                    {
                        if (!ExternalParser.TryParse_t_data_type_array_element_type((string)jarray[t_array_iterator_prefix_offset++], out element))
                        {
                            continue;
                        }
                        value[/*FOREACH(",")*/ t_array_iterator_string /*END*/] = element;
                    }
                    ELIF("$t_data_type_array_element_type->is_string()");
                    {
                        value[/*FOREACH(",")*/ t_array_iterator_string /*END*/] = (string)jarray[t_array_iterator_prefix_offset++];
                    }
                    ELSE();
                    {
                        if (!t_data_type_array_element_type.TryParse((string)jarray[t_array_iterator_prefix_offset++], out element))
                        {
                            continue;
                        }
                        value[/*FOREACH(",")*/ t_array_iterator_string /*END*/] = element;
                    }
                    END();
                }
                return(true);
            }
            catch
            {
                value = default(t_data_type);
                return(false);
            }
            ELIF("$t_data_type->is_list()");
            try
            {
                value  = new t_data_type();
                jarray = JArray.Parse(s);
                foreach (var jarray_element in jarray)
                {
                    t_data_type_list_element_type element;

                    IF("data_type_need_external_parser($t_data_type->listElementType)");
                    if (!ExternalParser.TryParse_t_data_type_list_element_type_display((string)jarray_element, out element))
                    {
                        continue;
                        //TODO what to do if we fail on an item?
                        //Same situation applies for arrays also.
                        //throw new Exception("Cannot parse \""+capture.Value+"\" into [META_OUTPUT($t_data_type->listElementType)].");
                    }
                    value.Add(element);
                    ELIF("$t_data_type->listElementType->is_string()");//Assign unescaped json string.
                    value.Add((string)jarray_element);
                    ELSE();
                    if (!t_data_type_list_element_type.TryParse((string)jarray_element, out element))
                    {
                        continue;
                        //throw new Exception("Cannot parse \""+capture.Value+"\" into [META_OUTPUT($t_data_type->listElementType)].");
                    }
                    value.Add(element);
                    END();
                }
                return(true);
            }
            catch
            {
                value = default(t_data_type);
                return(false);
            }
            END();
        }
 internal static bool TryParse_t_field_type_list_element_type_display(t_data_type value, out t_field_type_list_element_type parseResult)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 6
0
        /// <summary>
        /// Inserts an element into a sorted list.
        /// </summary>
        /// <param name="element">The object to insert.</param>
        /// <param name="comparison"></param>
        public unsafe void Insert(t_data_type element, Comparison <t_accessor_type> comparison)
        {
            byte *targetPtr = null;
            {
                MODULE_CALL("PushPointerFromVariable", "$t_data_type", "\"element\"", "\"push\"");
            }
            int size = (int)targetPtr;

            targetPtr = m_ptr;
            byte *endPtr = m_ptr + length;

            while (targetPtr < endPtr)
            {
                IF("!%element_need_accessor");
                {
                    if (comparison(*(t_accessor_type *)targetPtr, element) <= 0)
                    {
                        targetPtr += t_int;
                    }
                    else
                    {
                        break;
                    }
                }
                ELIF("%element_fixed");
                {
                    elementAccessor.m_ptr = targetPtr;
                    if (comparison(elementAccessor, element) <= 0)
                    {
                        targetPtr += t_int;
                    }
                    else
                    {
                        break;
                    }
                }
                ELIF("data_type_is_length_prefixed(node->listElementType)");
                ELIF("node->listElementType->is_struct()");
                {
                    elementAccessor.m_ptr = targetPtr + 4;
                    if (comparison(elementAccessor, element) <= 0)
                    {
                        MODULE_CALL("PushPointerThroughFieldType", "$t_data_type");
                    }
                    else
                    {
                        break;
                    }
                }
                ELSE();
                {
                    elementAccessor.m_ptr = targetPtr;
                    if (comparison(elementAccessor, element) <= 0)
                    {
                        MODULE_CALL("PushPointerThroughFieldType", "$t_data_type");
                    }
                    else
                    {
                        break;
                    }
                }
                END();
            }

            int offset = (int)(targetPtr - m_ptr);

            // InsertAndRemoveAtCodeForContainer TODO IAccessor reuse
            this.m_ptr          = this.ResizeFunction(this.m_ptr - sizeof(int), offset + sizeof(int), size);
            *(int *)this.m_ptr += size;
            this.m_ptr         += sizeof(int);

            targetPtr = this.m_ptr + offset;
            MODULE_CALL("PushPointerFromVariable", "$t_data_type", "\"element\"", "\"assign\"");
        }
Exemplo n.º 7
0
 /// <summary>
 /// Serializes a t_data_type object to Json string.
 /// </summary>
 /// <param name="value">The target object to be serialized.</param>
 /// <returns>The serialized Json string.</returns>
 public static string ToString(t_data_type value)
 {
     s_ensure_string_builder();
     ToString_impl(value, s_stringBuilder, in_json: false);
     return(s_stringBuilder.ToString());
 }
Exemplo n.º 8
0
        private static void ToString_impl(t_data_type value, StringBuilder str_builder, bool in_json)
        {
            //For top-level element, just return the literal representation.
            //For non-top-level element, it would be an element in a json structure. (object, or array)
            //Thus we have to escape strings, surround fields with quotes (") if necessary.

            IF("$t_data_type->is_string()");
            if (in_json)
            {
                str_builder.Append(JsonStringProcessor.escape(value));
            }
            else
            {
                str_builder.Append(value);
            }
            ELIF("$t_data_type->is_struct()");
            {
                IF("$t_data_type->is_optional()");
                if (value == null)
                {
                    return;
                }
                END();
                str_builder.Append('{');
                bool first_field = true;
                FOREACH();
                {
                    IF("$t_field_type->is_nullable() || !$t_field_type->is_value_type()");
                    IF("$t_data_type->is_optional()");
                    if (value.Value.t_field_name != null)
                    {
                        ELSE();
                    }
                    if (value.t_field_name != null)
                    /*END*/
                    {
                        END();
                        if (first_field)
                        {
                            first_field = false;
                        }
                        else
                        {
                            str_builder.Append(',');
                        }

                        str_builder.Append("\"t_field_name\":");


                        IF("$t_data_type->is_optional()");
                        ToString_impl(value.Value.t_field_name, str_builder, in_json: true);
                        ELSE();
                        ToString_impl(value.t_field_name, str_builder, in_json: true);
                        END();

                        IF("$t_field_type->is_nullable() || !$t_field_type->is_value_type()");
                    }
                    END();
                }
                END();
                str_builder.Append('}');
            }
            ELIF("$t_data_type->is_value_type()");
            {
                IF("$t_data_type->is_enum() || $t_data_type->is_datetime() || $t_data_type->is_guid()");
                if (in_json)
                {
                    str_builder.Append('"');
                }
                END();

                IF("$t_data_type->is_bool()");
                {
                    str_builder.Append(value.ToString().ToLowerInvariant());
                }
                ELIF("$t_data_type->is_datetime()");
                {
                    IF("$t_data_type->is_nullable()");
                    {
                        str_builder.Append(value.Value.ToString("o", CultureInfo.InvariantCulture));
                    }
                    ELSE();
                    {
                        str_builder.Append(value.ToString("o", CultureInfo.InvariantCulture));
                    }
                    END();
                }
                ELSE();
                {
                    str_builder.Append(value);
                }
                END();

                IF("$t_data_type->is_enum() || $t_data_type->is_datetime() || $t_data_type->is_guid()");
                if (in_json)
                {
                    str_builder.Append('"');
                }
                END();
            }
            ELIF("$t_data_type->is_array() || $t_data_type->is_list()");
            {
                str_builder.Append('[');
                bool first = true;
                foreach (var element in value)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        str_builder.Append(',');
                    }
                    ToString_impl(element, str_builder, in_json: true);
                }
                str_builder.Append(']');
            }
            ELSE();
            throw new Exception("Internal error T5007");
            END();
        }
Exemplo n.º 9
0
 internal static t_data_type ConvertFrom_t_data_type_display(t_data_type value)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 10
0
Arquivo: Index.cs Projeto: d3m0n5/GDB
 public static bool ElementContainsSubstring(this t_data_type list, params string[] substrings)
 {
     return(ElementContainsSubstring(list, substrings as IEnumerable <string>));
 }