// Path: src/main/org/yecht/Data.java
// public abstract class Data {
//     public abstract Data copy();
// 
//     public static class Map extends Data {
//         public MapStyle style;
//         public Object[] keys;
//         public Object[] values;
//         public int capa;
//         public int idx;
// 
//         public String toString() {
//             return "{idx=" + idx + ", capa=" + capa + ", keys=" + java.util.Arrays.asList(keys) + ", values=" + java.util.Arrays.asList(values) + "}";
//         }
// 
//         public Map copy() {
//             Map m = new Map();
//             m.style = this.style;
//             m.keys = new Object[this.keys.length];
//             System.arraycopy(this.keys, 0, m.keys, 0, this.keys.length);
//             m.values = new Object[this.values.length];
//             System.arraycopy(this.values, 0, m.values, 0, this.values.length);
//             m.capa = this.capa;
//             m.idx = this.idx;
//             return m;
//         }
//     }
// 
//     public static class Seq extends Data {
//         public SeqStyle style;
//         public Object[] items;
//         public int capa;
//         public int idx;
// 
//         public String toString() {
//             return "[idx=" + idx + ", capa=" + capa + ", items=" + java.util.Arrays.asList(items) + "]";
//         }
// 
//         public Seq copy() {
//             Seq m = new Seq();
//             m.style = this.style;
//             m.items = new Object[this.items.length];
//             System.arraycopy(this.items, 0, m.items, 0, this.items.length);
//             m.capa = this.capa;
//             m.idx = this.idx;
//             return m;
//         }
//     }
// 
//     public static class Str extends Data {
//         public ScalarStyle style;
//         public Pointer ptr;
//         public int len;
// 
//         public String toString() {
//             return "\"" + new String(ptr.buffer, ptr.start, len) + "\"";
//         }
// 
//         public Str copy() {
//             Str m = new Str();
//             m.ptr = Pointer.create(this.ptr.buffer, this.ptr.start);
//             m.len = this.len;
//             return m;
//         }
//     }
// }// Data
// 
// Path: src/main/org/yecht/MapStyle.java
// public enum MapStyle {
//     None, Inline
// }


import org.yecht.Data;
import org.yecht.MapStyle;
import org.jruby.Ruby;
import org.jruby.RubyArray;
import org.jruby.RubyClass;
import org.jruby.RubyHash;
import org.jruby.RubyObject;
import org.jruby.anno.JRubyMethod;
import org.jruby.runtime.ObjectAllocator;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.TypeConverter;
            IRubyObject keys = hsh.callMethod(ctx, "keys");
            for(int i = 0; i < ((RubyArray)keys).getLength(); i++) {
                IRubyObject key = ((RubyArray)keys).entry(i);
                node.mapAdd(key, ((RubyHash)hsh).op_aref(ctx, key));
            }
        }

        ((RubyObject)self).fastSetInstanceVariable("@value", val);
        return val;
    }

    // syck_map_add_m
    @JRubyMethod
    public static IRubyObject add(IRubyObject self, IRubyObject key, IRubyObject val) {
        IRubyObject emitter = (IRubyObject)((RubyObject)self).fastGetInstanceVariable("@emitter");
        org.yecht.Node node = (org.yecht.Node)self.dataGetStructChecked();
        if(emitter.respondsTo("node_export")) {
            key = emitter.callMethod(self.getRuntime().getCurrentContext(), "node_export", key);
            val = emitter.callMethod(self.getRuntime().getCurrentContext(), "node_export", val);
        }
        node.mapAdd(key, val);
        ((RubyHash)((RubyObject)self).fastGetInstanceVariable("@value")).fastASet(key, val);
        return self;
    }

    // syck_map_style_set
    @JRubyMethod(name = "style=")
    public static IRubyObject style_set(IRubyObject self, IRubyObject style) {
        org.yecht.Node node = (org.yecht.Node)self.dataGetStructChecked();
        Ruby runtime = self.getRuntime();
// Path: src/main/org/yecht/Data.java
// public abstract class Data {
//     public abstract Data copy();
// 
//     public static class Map extends Data {
//         public MapStyle style;
//         public Object[] keys;
//         public Object[] values;
//         public int capa;
//         public int idx;
// 
//         public String toString() {
//             return "{idx=" + idx + ", capa=" + capa + ", keys=" + java.util.Arrays.asList(keys) + ", values=" + java.util.Arrays.asList(values) + "}";
//         }
// 
//         public Map copy() {
//             Map m = new Map();
//             m.style = this.style;
//             m.keys = new Object[this.keys.length];
//             System.arraycopy(this.keys, 0, m.keys, 0, this.keys.length);
//             m.values = new Object[this.values.length];
//             System.arraycopy(this.values, 0, m.values, 0, this.values.length);
//             m.capa = this.capa;
//             m.idx = this.idx;
//             return m;
//         }
//     }
// 
//     public static class Seq extends Data {
//         public SeqStyle style;
//         public Object[] items;
//         public int capa;
//         public int idx;
// 
//         public String toString() {
//             return "[idx=" + idx + ", capa=" + capa + ", items=" + java.util.Arrays.asList(items) + "]";
//         }
// 
//         public Seq copy() {
//             Seq m = new Seq();
//             m.style = this.style;
//             m.items = new Object[this.items.length];
//             System.arraycopy(this.items, 0, m.items, 0, this.items.length);
//             m.capa = this.capa;
//             m.idx = this.idx;
//             return m;
//         }
//     }
// 
//     public static class Str extends Data {
//         public ScalarStyle style;
//         public Pointer ptr;
//         public int len;
// 
//         public String toString() {
//             return "\"" + new String(ptr.buffer, ptr.start, len) + "\"";
//         }
// 
//         public Str copy() {
//             Str m = new Str();
//             m.ptr = Pointer.create(this.ptr.buffer, this.ptr.start);
//             m.len = this.len;
//             return m;
//         }
//     }
// }// Data
// 
// Path: src/main/org/yecht/MapStyle.java
// public enum MapStyle {
//     None, Inline
// }


// Path: ext/ruby/src/java/org/yecht/ruby/Map.java
import org.yecht.Data;
import org.yecht.MapStyle;
import org.jruby.Ruby;
import org.jruby.RubyArray;
import org.jruby.RubyClass;
import org.jruby.RubyHash;
import org.jruby.RubyObject;
import org.jruby.anno.JRubyMethod;
import org.jruby.runtime.ObjectAllocator;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.TypeConverter;

            IRubyObject keys = hsh.callMethod(ctx, "keys");
            for(int i = 0; i < ((RubyArray)keys).getLength(); i++) {
                IRubyObject key = ((RubyArray)keys).entry(i);
                node.mapAdd(key, ((RubyHash)hsh).op_aref(ctx, key));
            }
        }

        ((RubyObject)self).fastSetInstanceVariable("@value", val);
        return val;
    }

    // syck_map_add_m
    @JRubyMethod
    public static IRubyObject add(IRubyObject self, IRubyObject key, IRubyObject val) {
        IRubyObject emitter = (IRubyObject)((RubyObject)self).fastGetInstanceVariable("@emitter");
        org.yecht.Node node = (org.yecht.Node)self.dataGetStructChecked();
        if(emitter.respondsTo("node_export")) {
            key = emitter.callMethod(self.getRuntime().getCurrentContext(), "node_export", key);
            val = emitter.callMethod(self.getRuntime().getCurrentContext(), "node_export", val);
        }
        node.mapAdd(key, val);
        ((RubyHash)((RubyObject)self).fastGetInstanceVariable("@value")).fastASet(key, val);
        return self;
    }

    // syck_map_style_set
    @JRubyMethod(name = "style=")
    public static IRubyObject style_set(IRubyObject self, IRubyObject style) {
        org.yecht.Node node = (org.yecht.Node)self.dataGetStructChecked();
        Ruby runtime = self.getRuntime();
        Data.Map ds = (Data.Map)node.data;