<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta name="Content-Type" content="text/html; charset=utf-8" />
<title>Module: Rumai::IXP::Struct</title>
<link rel="stylesheet" href="../../css/style.css" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="../../css/common.css" type="text/css" media="screen" charset="utf-8" />

<script type="text/javascript" charset="utf-8">
  relpath = '../..';
  if (relpath != '') relpath += '/';
</script>
<script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>

  </head>
  <body>
    <script type="text/javascript" charset="utf-8">
      if (window.top.frames.main) document.body.className = 'frames';
    </script>
    
    <div id="header">
      <div id="menu">
  
    <a href="../../_index.html">Index (S)</a> &raquo; 
    <span class='title'><a href="../../Rumai.html" title="Rumai (module)">Rumai</a></span> &raquo; <span class='title'><a href="../IXP.html" title="Rumai::IXP (module)">IXP</a></span>
     &raquo; 
    <span class="title">Struct</span>
  
  
  <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>

      <div id="search">
  <a id="class_list_link" href="#">Class List</a>
  <a id="method_list_link" href="#">Method List</a>
  <a id ="file_list_link" href="#">File List</a>
</div>

      <div class="clear"></div>
    </div>
    
    <iframe id="search_frame"></iframe>
    
    <div id="content"><h1>Module: Rumai::IXP::Struct 
  
  
</h1>

<dl class="box">
  
  
    
  
    
  
  
    <dt class="r1">Included in:</dt>
    <dd class="r1"><a href="Fcall.html" title="Rumai::IXP::Fcall (class)">Fcall</a>, <a href="Qid.html" title="Rumai::IXP::Qid (class)">Qid</a>, <a href="Stat.html" title="Rumai::IXP::Stat (class)">Stat</a></dd>
    
  
  
    <dt class="r2 last">Defined in:</dt>
    <dd class="r2 last">lib/rumai/ixp/message.rb</dd>
  
</dl>
<div class="clear"></div>

<h2>Overview</h2><div class="docstring">
  <div class="discussion">
    <p>
A serializable 9P2000 data structure.
</p>


  </div>
</div>
<div class="tags">
  
</div><h2>Defined Under Namespace</h2>
<p class="children">
   
    
   
    
      <strong class="classes">Classes:</strong> <a href="Struct/ClassField.html" title="Rumai::IXP::Struct::ClassField (class)">ClassField</a>, <a href="Struct/Field.html" title="Rumai::IXP::Struct::Field (class)">Field</a>, <a href="Struct/Integer8Field.html" title="Rumai::IXP::Struct::Integer8Field (class)">Integer8Field</a>, <a href="Struct/StringField.html" title="Rumai::IXP::Struct::StringField (class)">StringField</a>
    
  
</p>


  <h2>Instance Attribute Summary</h2>
  <ul class="summary">
    
      <li class="public ">
  <span class="summary_signature">
    
      <a href="#fields-instance_method" title="#fields (instance method)">- (Object) <strong>fields</strong> </a>
    

    
  </span>
  
  
    <span class="note title readonly">readonly</span>
    
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>
Returns the value of attribute fields.
</p>
</div></span>
  
</li>

    
  </ul>


  
    <h2>Class Method Summary</h2>

    <ul class="summary">
      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#included-class_method" title="included (class method)">+ (Object) <strong>included</strong>(target) </a>
    

    
  </span>
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>
Provides a convenient DSL (for defining fields) to all objects which
<b>include</b> this module.
</p>
</div></span>
  
</li>

      
    </ul>
  
    <h2>Instance Method Summary</h2>

    <ul class="summary">
      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#initialize-instance_method" title="#initialize (instance method)">- (Struct) <strong>initialize</strong>(field_values = {}) </a>
    

    
  </span>
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>
Allows field values to be initialized via the constructor.
</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#load_9p-instance_method" title="#load_9p (instance method)">- (Object) <strong>load_9p</strong>(stream) </a>
    

    
  </span>
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>
Populates this object with information from the given 9P2000 byte stream.
</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#to_9p-instance_method" title="#to_9p (instance method)">- (Object) <strong>to_9p</strong> </a>
    

    
  </span>
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>
Transforms this object into a string of 9P2000 bytes.
</p>
</div></span>
  
</li>

      
    </ul>
  


  <div id="instance_attr_details" class="attr_details">
    <h2>Instance Attribute Details</h2>
    
      
      <span id=""></span>
      <span id="fields-instance_method"></span>
      <div class="method_details first">
  <p class="signature first" id="fields-instance_method">
  
    - (<tt><a href="../../Object.html" title="Object (class)">Object</a></tt>) <strong>fields</strong>  <span class="extras">(readonly)</span>
  

  
</p><div class="docstring">
  <div class="discussion">
    <p>
Returns the value of attribute fields
</p>


  </div>
</div>
<div class="tags">
  
</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


46
47
48</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/rumai/ixp/message.rb', line 46</span>

<span class='kw'>def</span> <span class='id fields'>fields</span>
  <span class='ivar'>@fields</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
  </div>


  <div id="class_method_details" class="method_details_list">
    <h2>Class Method Details</h2>
    
    
      <div class="method_details first">
  <p class="signature first" id="included-class_method">
  
    + (<tt><a href="../../Object.html" title="Object (class)">Object</a></tt>) <strong>included</strong>(target) 
  

  
</p><div class="docstring">
  <div class="discussion">
    <p>
Provides a convenient DSL (for defining fields) to all objects which
<b>include</b> this module.
</p>


  </div>
</div>
<div class="tags">
  
</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/rumai/ixp/message.rb', line 80</span>

<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id included'>included</span> <span class='id target'>target</span>
  <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='id target'>target</span>
    <span class='comment'>##
</span>    <span class='comment'># Returns a list of fields which compose this Struct.
</span>    <span class='comment'>#
</span>    <span class='kw'>def</span> <span class='id fields'>fields</span>
      <span class='ivar'>@fields</span> <span class='op'>||=</span>
        <span class='kw'>if</span> <span class='id superclass'>superclass</span><span class='period'>.</span><span class='id respond_to?'>respond_to?</span> <span class='symbol'>:fields</span>
          <span class='id superclass'>superclass</span><span class='period'>.</span><span class='id fields'>fields</span><span class='period'>.</span><span class='id dup'>dup</span>
        <span class='kw'>else</span>
          <span class='lbracket'>[</span><span class='rbracket'>]</span>
        <span class='kw'>end</span>
    <span class='kw'>end</span>

    <span class='comment'>##
</span>    <span class='comment'># Defines a new field in this Struct.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param args
</span>    <span class='comment'>#   arguments for {Field.new}
</span>    <span class='comment'>#
</span>    <span class='kw'>def</span> <span class='id field'>field</span> <span class='id name'>name</span><span class='comma'>,</span> <span class='id format'>format</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>*</span><span class='id args'>args</span>
      <span class='id klass'>klass</span> <span class='op'>=</span> <span class='const'>Field</span><span class='period'>.</span><span class='id factory'>factory</span><span class='lparen'>(</span><span class='id format'>format</span><span class='rparen'>)</span>
      <span class='id field'>field</span> <span class='op'>=</span> <span class='id klass'>klass</span><span class='period'>.</span><span class='id new'>new</span><span class='lparen'>(</span><span class='id name'>name</span><span class='period'>.</span><span class='id to_sym'>to_sym</span><span class='comma'>,</span> <span class='id format'>format</span><span class='comma'>,</span> <span class='op'>*</span><span class='id args'>args</span><span class='rparen'>)</span>

      <span class='comment'># register field as being part of this structure
</span>      <span class='id fields'>fields</span> <span class='op'>&lt;&lt;</span> <span class='id field'>field</span>

      <span class='comment'># provide accessor methods to field values
</span>      <span class='kw'>self</span><span class='period'>.</span><span class='id class_eval'>class_eval</span> <span class='heredoc_beg'>&lt;&lt;-EOS</span><span class='tstring_content'>        def </span><span class='embexpr_beg'>#{</span><span class='id field'>field</span><span class='period'>.</span><span class='id name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>
</span><span class='tstring_content'>          @values[</span><span class='embexpr_beg'>#{</span><span class='id field'>field</span><span class='period'>.</span><span class='id name'>name</span><span class='period'>.</span><span class='id inspect'>inspect</span><span class='rbrace'>}</span><span class='tstring_content'>]
        end

</span><span class='tstring_content'>        def </span><span class='embexpr_beg'>#{</span><span class='id field'>field</span><span class='period'>.</span><span class='id name'>name</span><span class='rbrace'>}</span><span class='tstring_content'>= value
</span><span class='tstring_content'>          @values[</span><span class='embexpr_beg'>#{</span><span class='id field'>field</span><span class='period'>.</span><span class='id name'>name</span><span class='period'>.</span><span class='id inspect'>inspect</span><span class='rbrace'>}</span><span class='tstring_content'>] = value
        end
</span><span class='heredoc_end'>      EOS
</span><span class='comma'>,</span> <span class='kw'>__FILE__</span><span class='comma'>,</span> <span class='kw'>__LINE__</span>

      <span class='id field'>field</span>
    <span class='kw'>end</span>

    <span class='comment'>##
</span>    <span class='comment'># Creates a new instance of this class from the
</span>    <span class='comment'># given 9P2000 byte stream and returns the instance.
</span>    <span class='comment'>#
</span>    <span class='kw'>def</span> <span class='id from_9p'>from_9p</span> <span class='id stream'>stream</span><span class='comma'>,</span> <span class='id msg_class'>msg_class</span> <span class='op'>=</span> <span class='kw'>self</span>
      <span class='id msg'>msg</span> <span class='op'>=</span> <span class='id msg_class'>msg_class</span><span class='period'>.</span><span class='id new'>new</span>
      <span class='id msg'>msg</span><span class='period'>.</span><span class='id load_9p'>load_9p</span><span class='lparen'>(</span><span class='id stream'>stream</span><span class='rparen'>)</span>
      <span class='id msg'>msg</span>
    <span class='kw'>end</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
  </div>

  <div id="instance_method_details" class="method_details_list">
    <h2>Instance Method Details</h2>
    
    
      <div class="method_details first">
  <p class="signature first" id="initialize-instance_method">
  
    - (<tt><a href="" title="Rumai::IXP::Struct (module)">Struct</a></tt>) <strong>initialize</strong>(field_values = {}) 
  

  
</p><div class="docstring">
  <div class="discussion">
    <p>
Allows field values to be initialized via the constructor.
</p>


  </div>
</div>
<div class="tags">
  <h3>Parameters:</h3>
<ul class="param">
  
    <li>
      
        <span class='type'></span>
      
      
        <span class='name'>field_values</span>
      
      
        <em class="default">(defaults to: <tt>{}</tt>)</em>
      
      
        &mdash;
        <div class='inline'><p>
a mapping from field name to field value
</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


54
55
56
57</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/rumai/ixp/message.rb', line 54</span>

<span class='kw'>def</span> <span class='id initialize'>initialize</span> <span class='id field_values'>field_values</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
  <span class='ivar'>@fields</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id class'>class</span><span class='period'>.</span><span class='id fields'>fields</span>
  <span class='ivar'>@values</span> <span class='op'>=</span> <span class='id field_values'>field_values</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <p class="signature " id="load_9p-instance_method">
  
    - (<tt><a href="../../Object.html" title="Object (class)">Object</a></tt>) <strong>load_9p</strong>(stream) 
  

  
</p><div class="docstring">
  <div class="discussion">
    <p>
Populates this object with information from the given 9P2000 byte stream.
</p>


  </div>
</div>
<div class="tags">
  
</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


70
71
72
73
74</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/rumai/ixp/message.rb', line 70</span>

<span class='kw'>def</span> <span class='id load_9p'>load_9p</span> <span class='id stream'>stream</span>
  <span class='ivar'>@fields</span><span class='period'>.</span><span class='id each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id f'>f</span><span class='op'>|</span>
    <span class='id f'>f</span><span class='period'>.</span><span class='id load_9p'>load_9p</span> <span class='id stream'>stream</span><span class='comma'>,</span> <span class='ivar'>@values</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <p class="signature " id="to_9p-instance_method">
  
    - (<tt><a href="../../Object.html" title="Object (class)">Object</a></tt>) <strong>to_9p</strong> 
  

  
</p><div class="docstring">
  <div class="discussion">
    <p>
Transforms this object into a string of 9P2000 bytes.
</p>


  </div>
</div>
<div class="tags">
  
</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


62
63
64</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/rumai/ixp/message.rb', line 62</span>

<span class='kw'>def</span> <span class='id to_9p'>to_9p</span>
  <span class='ivar'>@fields</span><span class='period'>.</span><span class='id inject'>inject</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id s'>s</span><span class='comma'>,</span><span class='id f'>f</span><span class='op'>|</span> <span class='id s'>s</span> <span class='op'>&lt;&lt;</span> <span class='id f'>f</span><span class='period'>.</span><span class='id to_9p'>to_9p</span><span class='lparen'>(</span><span class='ivar'>@values</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id join'>join</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
  </div>

</div>
    
    <div id="footer">
  Generated on Thu Apr  1 00:30:58 2010 by 
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool">yard</a>
  0.5.4 (ruby-1.9.1).
</div>

  </body>
</html>