summary refs log tree commit diff stats
path: root/doc/pydoc/ranger.fsobject.loader.html
blob: 29ba861c2ef285d21bbed011fbd5fd90e4f07ae3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
132
133
134
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module ranger.fsobject.loader</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="ranger.html"><font color="#ffffff">ranger</font></a>.<a href="ranger.fsobject.html"><font color="#ffffff">fsobject</font></a>.loader</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/hut/ranger/ranger/fsobject/loader.py">/home/hut/ranger/ranger/fsobject/loader.py</a></font></td></tr></table>
    <p><tt>#&nbsp;Copyright&nbsp;(c)&nbsp;2009,&nbsp;2010&nbsp;hut&nbsp;&lt;hut@lavabit.com&gt;<br>
#<br>
#&nbsp;Permission&nbsp;to&nbsp;use,&nbsp;copy,&nbsp;modify,&nbsp;and/or&nbsp;distribute&nbsp;this&nbsp;software&nbsp;for&nbsp;any<br>
#&nbsp;purpose&nbsp;with&nbsp;or&nbsp;without&nbsp;fee&nbsp;is&nbsp;hereby&nbsp;granted,&nbsp;provided&nbsp;that&nbsp;the&nbsp;above<br>
#&nbsp;copyright&nbsp;notice&nbsp;and&nbsp;this&nbsp;permission&nbsp;notice&nbsp;appear&nbsp;in&nbsp;all&nbsp;copies.<br>
#<br>
#&nbsp;THE&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;"AS&nbsp;IS"&nbsp;AND&nbsp;THE&nbsp;AUTHOR&nbsp;DISCLAIMS&nbsp;ALL&nbsp;WARRANTIES<br>
#&nbsp;WITH&nbsp;REGARD&nbsp;TO&nbsp;THIS&nbsp;SOFTWARE&nbsp;INCLUDING&nbsp;ALL&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF<br>
#&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;AUTHOR&nbsp;BE&nbsp;LIABLE&nbsp;FOR<br>
#&nbsp;ANY&nbsp;SPECIAL,&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;OR&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;OR&nbsp;ANY&nbsp;DAMAGES<br>
#&nbsp;WHATSOEVER&nbsp;RESULTING&nbsp;FROM&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA&nbsp;OR&nbsp;PROFITS,&nbsp;WHETHER&nbsp;IN&nbsp;AN<br>
#&nbsp;ACTION&nbsp;OF&nbsp;CONTRACT,&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHER&nbsp;TORTIOUS&nbsp;ACTION,&nbsp;ARISING&nbsp;OUT&nbsp;OF<br>
#&nbsp;OR&nbsp;IN&nbsp;CONNECTION&nbsp;WITH&nbsp;THE&nbsp;USE&nbsp;OR&nbsp;PERFORMANCE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="math.html">math</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ranger.fsobject.loader.html#LoadableObject">LoadableObject</a>
</font></dt></dl>
</dd>
<dt><font face="helvetica, arial"><a href="ranger.shared.html#FileManagerAware">ranger.shared.FileManagerAware</a>(<a href="ranger.shared.html#Awareness">ranger.shared.Awareness</a>)
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ranger.fsobject.loader.html#Loader">Loader</a>
</font></dt></dl>
</dd>
</dl>
 <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="LoadableObject">class <strong>LoadableObject</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
    
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="LoadableObject-__init__"><strong>__init__</strong></a>(self, gen, descr)</dt></dl>

<dl><dt><a name="LoadableObject-get_description"><strong>get_description</strong></a>(self)</dt></dl>

<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="Loader">class <strong>Loader</strong></a>(<a href="ranger.shared.html#FileManagerAware">ranger.shared.FileManagerAware</a>)</font></td></tr>
    
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="ranger.fsobject.loader.html#Loader">Loader</a></dd>
<dd><a href="ranger.shared.html#FileManagerAware">ranger.shared.FileManagerAware</a></dd>
<dd><a href="ranger.shared.html#Awareness">ranger.shared.Awareness</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
Methods defined here:<br>
<dl><dt><a name="Loader-__init__"><strong>__init__</strong></a>(self)</dt></dl>

<dl><dt><a name="Loader-add"><strong>add</strong></a>(self, obj)</dt><dd><tt>Add&nbsp;an&nbsp;<a href="__builtin__.html#object">object</a>&nbsp;to&nbsp;the&nbsp;queue.<br>
It&nbsp;should&nbsp;have&nbsp;a&nbsp;load_generator&nbsp;method.</tt></dd></dl>

<dl><dt><a name="Loader-has_work"><strong>has_work</strong></a>(self)</dt><dd><tt>Is&nbsp;there&nbsp;anything&nbsp;to&nbsp;load?</tt></dd></dl>

<dl><dt><a name="Loader-move"><strong>move</strong></a>(self, _from, to)</dt></dl>

<dl><dt><a name="Loader-remove"><strong>remove</strong></a>(self, item<font color="#909090">=None</font>, index<font color="#909090">=None</font>)</dt></dl>

<dl><dt><a name="Loader-rotate"><strong>rotate</strong></a>(self)</dt><dd><tt>Rotate&nbsp;the&nbsp;throbber</tt></dd></dl>

<dl><dt><a name="Loader-work"><strong>work</strong></a>(self)</dt><dd><tt>Load&nbsp;items&nbsp;from&nbsp;the&nbsp;queue&nbsp;if&nbsp;there&nbsp;are&nbsp;any.<br>
Stop&nbsp;after&nbsp;approximately&nbsp;self.<strong>seconds_of_work_time</strong>.</tt></dd></dl>

<hr>
Data and other attributes defined here:<br>
<dl><dt><strong>seconds_of_work_time</strong> = 0.029999999999999999</dl>

<hr>
Data and other attributes inherited from <a href="ranger.shared.html#FileManagerAware">ranger.shared.FileManagerAware</a>:<br>
<dl><dt><strong>fm</strong> = None</dl>

<hr>
Data descriptors inherited from <a href="ranger.shared.html#Awareness">ranger.shared.Awareness</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-status_generator"><strong>status_generator</strong></a>()</dt><dd><tt>Generate&nbsp;a&nbsp;rotating&nbsp;line&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;as&nbsp;a&nbsp;throbber</tt></dd></dl>
 <dl><dt><a name="-time"><strong>time</strong></a>(...)</dt><dd><tt><a href="#-time">time</a>()&nbsp;-&gt;&nbsp;floating&nbsp;point&nbsp;number<br>
&nbsp;<br>
Return&nbsp;the&nbsp;current&nbsp;time&nbsp;in&nbsp;seconds&nbsp;since&nbsp;the&nbsp;Epoch.<br>
Fractions&nbsp;of&nbsp;a&nbsp;second&nbsp;may&nbsp;be&nbsp;present&nbsp;if&nbsp;the&nbsp;system&nbsp;clock&nbsp;provides&nbsp;them.</tt></dd></dl>
</td></tr></table>
</body></html>
<- copy 94 22:num <- copy 95 # skip alloc id for destination 31:num <- copy 40 30:&:num/lookup <- get 10:&:point/lookup, 0:offset ] +mem: storing 94 in location 41 :(scenario include_nonlookup_properties) def main [ # skip alloc id for 10:&:point 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 94 22:num <- copy 95 30:num <- get 10:&:point/lookup/foo, 0:offset ] +mem: storing 94 in location 30 :(after "Update GET base in Check") if (!canonize_type(base)) break; :(after "Update GET product in Check") if (!canonize_type(product)) break; :(after "Update GET base in Run") canonize(base); :(scenario put_indirect) def main [ # skip alloc id for 10:&:point 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 94 22:num <- copy 95 10:&:point/lookup <- put 10:&:point/lookup, 0:offset, 96 ] +mem: storing 96 in location 21 :(after "Update PUT base in Check") if (!canonize_type(base)) break; :(after "Update PUT offset in Check") if (!canonize_type(offset)) break; :(after "Update PUT base in Run") canonize(base); :(scenario put_product_error_with_lookup) % Hide_errors = true; def main [ # skip alloc id for 10:&:point 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 94 22:num <- copy 95 10:&:point <- put 10:&:point/lookup, x:offset, 96 ] +error: main: product of 'put' must be first ingredient '10:&:point/lookup', but got '10:&:point' :(before "End PUT Product Checks") reagent/*copy*/ p = inst.products.at(0); if (!canonize_type(p)) break; // error raised elsewhere reagent/*copy*/ i = inst.ingredients.at(0); if (!canonize_type(i)) break; // error raised elsewhere if (!types_strictly_match(p, i)) { raise << maybe(get(Recipe, r).name) << "product of 'put' must be first ingredient '" << inst.ingredients.at(0).original_string << "', but got '" << inst.products.at(0).original_string << "'\n" << end(); break; } :(scenario new_error) % Hide_errors = true; def main [ 1:num/raw <- new num:type ] +error: main: product of 'new' has incorrect type: '1:num/raw <- new num:type' :(after "Update NEW product in Check") canonize_type(product); :(scenario copy_array_indirect) def main [ # skip alloc id for 10:&:@:num 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 3 # array length 22:num <- copy 94 23:num <- copy 95 24:num <- copy 96 30:@:num <- copy 10:&:@:num/lookup ] +mem: storing 3 in location 30 +mem: storing 94 in location 31 +mem: storing 95 in location 32 +mem: storing 96 in location 33 :(scenario create_array_indirect) def main [ # skip alloc id for 10:&:@:num:3 11:num <- copy 3000 10:&:array:num:3/lookup <- create-array ] +mem: storing 3 in location 3001 :(after "Update CREATE_ARRAY product in Check") if (!canonize_type(product)) break; :(after "Update CREATE_ARRAY product in Run") canonize(product); :(scenario index_indirect) def main [ # skip alloc id for 10:&:@:num 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 3 # array length 22:num <- copy 94 23:num <- copy 95 24:num <- copy 96 30:num <- index 10:&:@:num/lookup, 1 ] +mem: storing 95 in location 30 :(before "Update INDEX base in Check") if (!canonize_type(base)) break; :(before "Update INDEX index in Check") if (!canonize_type(index)) break; :(before "Update INDEX product in Check") if (!canonize_type(product)) break; :(before "Update INDEX base in Run") canonize(base); :(before "Update INDEX index in Run") canonize(index); :(scenario put_index_indirect) def main [ # skip alloc id for 10:&:@:num 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 3 # array length 22:num <- copy 94 23:num <- copy 95 24:num <- copy 96 10:&:@:num/lookup <- put-index 10:&:@:num/lookup, 1, 97 ] +mem: storing 97 in location 23 :(scenario put_index_indirect_2) def main [ 10:num <- copy 3 # array length 11:num <- copy 94 12:num <- copy 95 13:num <- copy 96 # skip alloc id for address 21:num <- copy 30 # skip alloc id for payload 31:num <- copy 1 # index 10:@:num <- put-index 10:@:num, 20:&:num/lookup, 97 ] +mem: storing 97 in location 12 :(scenario put_index_product_error_with_lookup) % Hide_errors = true; def main [ # skip alloc id for 10:&:@:num 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 3 # array length 22:num <- copy 94 23:num <- copy 95 24:num <- copy 96 10:&:@:num <- put-index 10:&:@:num/lookup, 1, 34 ] +error: main: product of 'put-index' must be first ingredient '10:&:@:num/lookup', but got '10:&:@:num' :(before "End PUT_INDEX Product Checks") reagent/*copy*/ p = inst.products.at(0); if (!canonize_type(p)) break; // error raised elsewhere reagent/*copy*/ i = inst.ingredients.at(0); if (!canonize_type(i)) break; // error raised elsewhere if (!types_strictly_match(p, i)) { raise << maybe(get(Recipe, r).name) << "product of 'put-index' must be first ingredient '" << inst.ingredients.at(0).original_string << "', but got '" << inst.products.at(0).original_string << "'\n" << end(); break; } :(scenario dilated_reagent_in_static_array) def main [ {1: (array (& num) 3)} <- create-array 10:&:num <- new num:type {1: (array (& num) 3)} <- put-index {1: (array (& num) 3)}, 0, 10:&:num *10:&:num <- copy 94 20:num <- copy *10:&:num ] +run: creating array from 7 locations +mem: storing 94 in location 20 :(before "Update PUT_INDEX base in Check") if (!canonize_type(base)) break; :(before "Update PUT_INDEX index in Check") if (!canonize_type(index)) break; :(before "Update PUT_INDEX value in Check") if (!canonize_type(value)) break; :(before "Update PUT_INDEX base in Run") canonize(base); :(before "Update PUT_INDEX index in Run") canonize(index); :(scenario length_indirect) def main [ # skip alloc id for 10:&:@:num 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 3 # array length 22:num <- copy 94 23:num <- copy 95 24:num <- copy 96 30:num <- length 10:&:array:num/lookup ] +mem: storing 3 in location 30 :(before "Update LENGTH array in Check") if (!canonize_type(array)) break; :(before "Update LENGTH array in Run") canonize(array); :(scenario maybe_convert_indirect) def main [ # skip alloc id for 10:&:number-or-point 11:num <- copy 20 # skip alloc id for payload 21:number-or-point <- merge 0/number, 94 30:num, 31:bool <- maybe-convert 10:&:number-or-point/lookup, i:variant ] +mem: storing 1 in location 31 +mem: storing 94 in location 30 :(scenario maybe_convert_indirect_2) def main [ # skip alloc id for 10:&:number-or-point 11:num <- copy 20 # skip alloc id for payload 21:number-or-point <- merge 0/number, 94 # skip alloc id for 30:&:num 31:num <- copy 40 30:&:num/lookup, 50:bool <- maybe-convert 10:&:number-or-point/lookup, i:variant ] +mem: storing 1 in location 50 +mem: storing 94 in location 41 :(scenario maybe_convert_indirect_3) def main [ # skip alloc id for 10:&:number-or-point 11:num <- copy 20 # skip alloc id for payload 21:number-or-point <- merge 0/number, 94 # skip alloc id for 30:&:bool 31:num <- copy 40 50:num, 30:&:bool/lookup <- maybe-convert 10:&:number-or-point/lookup, i:variant ] +mem: storing 1 in location 41 +mem: storing 94 in location 50 :(before "Update MAYBE_CONVERT base in Check") if (!canonize_type(base)) break; :(before "Update MAYBE_CONVERT product in Check") if (!canonize_type(product)) break; :(before "Update MAYBE_CONVERT status in Check") if (!canonize_type(status)) break; :(before "Update MAYBE_CONVERT base in Run") canonize(base); :(before "Update MAYBE_CONVERT product in Run") canonize(product); :(before "Update MAYBE_CONVERT status in Run") canonize(status); :(scenario merge_exclusive_container_indirect) def main [ # skip alloc id for 10:&:number-or-point 11:num <- copy 20 10:&:number-or-point/lookup <- merge 0/number, 34 ] # skip alloc id +mem: storing 0 in location 21 +mem: storing 34 in location 22 :(before "Update size_mismatch Check for MERGE(x) canonize(x); //: abbreviation for '/lookup': a prefix '*' :(scenario lookup_abbreviation) def main [ # skip alloc id for 10:&:num 11:num <- copy 20 # skip alloc id for payload 21:num <- copy 94 30:num <- copy *10:&:num ] +parse: ingredient: {10: ("&" "num"), "lookup": ()} +mem: storing 94 in location 30 :(before "End Parsing reagent") { while (starts_with(name, "*")) { name.erase(0, 1); properties.push_back(pair<string, string_tree*>("lookup", NULL)); } if (name.empty()) raise << "illegal name '" << original_string << "'\n" << end(); } //:: helpers for debugging :(before "End Primitive Recipe Declarations") _DUMP, :(before "End Primitive Recipe Numbers") put(Recipe_ordinal, "$dump", _DUMP); :(before "End Primitive Recipe Implementations") case _DUMP: { reagent/*copy*/ after_canonize = current_instruction().ingredients.at(0); canonize(after_canonize); cerr << maybe(current_recipe_name()) << current_instruction().ingredients.at(0).name << ' ' << no_scientific(current_instruction().ingredients.at(0).value) << " => " << no_scientific(after_canonize.value) << " => " << no_scientific(get_or_insert(Memory, after_canonize.value)) << '\n'; break; } //: grab an address, and then dump its value at intervals //: useful for tracking down memory corruption (writing to an out-of-bounds address) :(before "End Globals") int Bar = -1; :(before "End Primitive Recipe Declarations") _BAR, :(before "End Primitive Recipe Numbers") put(Recipe_ordinal, "$bar", _BAR); :(before "End Primitive Recipe Implementations") case _BAR: { if (current_instruction().ingredients.empty()) { if (Bar != -1) cerr << Bar << ": " << no_scientific(get_or_insert(Memory, Bar)) << '\n'; else cerr << '\n'; } else { reagent/*copy*/ tmp = current_instruction().ingredients.at(0); canonize(tmp); Bar = tmp.value; } break; }