Beispiel #1
0
        //////////////////////////////////////////////////////////////////////////
        // Map
        //////////////////////////////////////////////////////////////////////////

        public void writeMap(Map map)
        {
            // get k,v type
            MapType t = (MapType)map.@typeof();

            // decide if we're going output as single or multi-line format
            bool nl = isMultiLine(t.m_k) || isMultiLine(t.m_v);

            // figure out if we can use an inferred type
            bool inferred = false;

            if (curFieldType != null && curFieldType.fits(Sys.MapType))
            {
                inferred = true;
            }

            // clear field type, so it doesn't get used for inference again
            curFieldType = null;

            // if we don't have an inferred type, then prefix of type
            if (!inferred)
            {
                wType(t);
            }

            // handle empty map
            if (map.isEmpty())
            {
                w("[:]"); return;
            }

            // items
            level++;
            w('[');
            bool first = true;
            IDictionaryEnumerator en = map.pairsIterator();

            while (en.MoveNext())
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    w(',');
                }
                if (nl)
                {
                    w('\n').wIndent();
                }
                object key = en.Key;
                object val = en.Value;
                writeObj(key); w(':'); writeObj(val);
            }
            w(']');
            level--;
        }