4
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
7
<link rel="icon" type="image/vnd.microsoft.icon" href="http://www.gstatic.com/codesite/ph/images/phosting.ico">
9
<script type="text/javascript">
13
var codesite_token = null;
16
var logged_in_user_email = null;
19
var relative_base_url = "";
27
Project Hosting on Google Code</title>
28
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
30
<link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/7642550995449508181/css/ph_core.css">
32
<link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/7642550995449508181/css/ph_detail.css" >
35
<link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/7642550995449508181/css/d_sb_20080522.css" >
40
<link type="text/css" rel="stylesheet" href="http://www.gstatic.com/codesite/ph/7642550995449508181/css/d_ie.css" >
42
<style type="text/css">
43
.menuIcon.off { background: no-repeat url(http://www.gstatic.com/codesite/ph/images/dropdown_sprite.gif) 0 -42px }
44
.menuIcon.on { background: no-repeat url(http://www.gstatic.com/codesite/ph/images/dropdown_sprite.gif) 0 -28px }
45
.menuIcon.down { background: no-repeat url(http://www.gstatic.com/codesite/ph/images/dropdown_sprite.gif) 0 0; }
49
<script type="text/javascript">
50
var _gaq = _gaq || [];
52
['siteTracker._setAccount', 'UA-18071-1'],
53
['siteTracker._trackPageview']);
56
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
57
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
58
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
65
<a href="#" id="projects-dropdown" onclick="return false;"><u>My favorites</u> <small>▼</small></a>
66
| <a href="https://www.google.com/accounts/ServiceLogin?service=code&ltmpl=phosting&continue=http%3A%2F%2Fcode.google.com%2Fp%2Fnumexpr%2Fsource%2Fbrowse%2Ftrunk%2Fnumexpr%2Fwin32%2Fpthread.h&followup=http%3A%2F%2Fcode.google.com%2Fp%2Fnumexpr%2Fsource%2Fbrowse%2Ftrunk%2Fnumexpr%2Fwin32%2Fpthread.h" onclick="_CS_click('/gb/ph/signin');"><u>Sign in</u></a>
71
<div class="gbh" style="left: 0pt;"></div>
72
<div class="gbh" style="right: 0pt;"></div>
75
<div style="height: 1px"></div>
77
<div style="text-align:center;">
78
Support browsers that contribute to open source, try <a href="http://www.firefox.com">Firefox</a> or <a href="http://www.google.com/chrome">Google Chrome</a>.
82
<div style="font-weight:bold; color:#a03; padding:5px; margin-top:10px; margin-bottom:-10px; text-align:center; background:#ffeac0;">
83
Project Hosting will be READ-ONLY <a href='http://www.timeanddate.com/worldclock/fixedtime.html?month=8&day=10&year=2010&hour=7&min=0&sec=0&p1=224'>Tuesday at 7:00am PDT</a> due to brief network maintenance.
90
<table style="padding:0px; margin: 20px 0px 0px 0px; width:100%" cellpadding="0" cellspacing="0">
91
<tr style="height: 58px;">
93
<td style="width: 55px; text-align:center;">
94
<a href="/p/numexpr/">
96
<img src="http://www.gstatic.com/codesite/ph/images/defaultlogo.png" alt="Logo">
101
<td style="padding-left: 0.5em">
103
<div id="pname" style="margin: 0px 0px -3px 0px">
104
<a href="/p/numexpr/" style="text-decoration:none; color:#000">numexpr</a>
108
<i><a id="project_summary_link" href="/p/numexpr/" style="text-decoration:none; color:#000">Fast numerical array expression evaluator for Python and NumPy.</a></i>
112
<td style="white-space:nowrap;text-align:right">
114
<form action="/hosting/search">
115
<input size="30" name="q" value="">
116
<input type="submit" name="projectsearch" value="Search projects" >
124
<table id="mt" cellspacing="0" cellpadding="0" width="100%" border="0">
126
<th onclick="if (!cancelBubble) _go('/p/numexpr/');">
127
<div class="tab inactive">
128
<div class="round4"></div>
129
<div class="round2"></div>
130
<div class="round1"></div>
131
<div class="box-inner">
132
<a onclick="cancelBubble=true;" href="/p/numexpr/">Project Home</a>
135
</th><td> </td>
140
<th onclick="if (!cancelBubble) _go('/p/numexpr/downloads/list');">
141
<div class="tab inactive">
142
<div class="round4"></div>
143
<div class="round2"></div>
144
<div class="round1"></div>
145
<div class="box-inner">
146
<a onclick="cancelBubble=true;" href="/p/numexpr/downloads/list">Downloads</a>
149
</th><td> </td>
155
<th onclick="if (!cancelBubble) _go('/p/numexpr/w/list');">
156
<div class="tab inactive">
157
<div class="round4"></div>
158
<div class="round2"></div>
159
<div class="round1"></div>
160
<div class="box-inner">
161
<a onclick="cancelBubble=true;" href="/p/numexpr/w/list">Wiki</a>
164
</th><td> </td>
170
<th onclick="if (!cancelBubble) _go('/p/numexpr/issues/list');">
171
<div class="tab inactive">
172
<div class="round4"></div>
173
<div class="round2"></div>
174
<div class="round1"></div>
175
<div class="box-inner">
176
<a onclick="cancelBubble=true;" href="/p/numexpr/issues/list">Issues</a>
179
</th><td> </td>
185
<th onclick="if (!cancelBubble) _go('/p/numexpr/source/checkout');">
186
<div class="tab active">
187
<div class="round4"></div>
188
<div class="round2"></div>
189
<div class="round1"></div>
190
<div class="box-inner">
191
<a onclick="cancelBubble=true;" href="/p/numexpr/source/checkout">Source</a>
194
</th><td> </td>
197
<td width="100%"> </td>
200
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0" class="st">
214
<span class="inst1"><a href="/p/numexpr/source/checkout">Checkout</a></span> |
215
<span class="inst2"><a href="/p/numexpr/source/browse/">Browse</a></span> |
216
<span class="inst3"><a href="/p/numexpr/source/list">Changes</a></span> |
218
<form action="http://www.google.com/codesearch" method="get" style="display:inline"
219
onsubmit="document.getElementById('codesearchq').value = document.getElementById('origq').value + ' package:http://numexpr\\.googlecode\\.com'">
220
<input type="hidden" name="q" id="codesearchq" value="">
221
<input maxlength="2048" size="38" id="origq" name="origq" value="" title="Google Code Search" style="font-size:92%"> <input type="submit" value="Search Trunk" name="btnG" style="font-size:92%">
233
<td height="4" align="right" valign="top" class="bevel-right">
234
<div class="round4"></div>
235
<div class="round2"></div>
236
<div class="round1"></div>
240
<script type="text/javascript">
241
var cancelBubble = false;
242
function _go(url) { document.location = url; }
259
<style type="text/css">
260
#file_flipper { display: inline; float: right; white-space: nowrap; }
261
#file_flipper.hidden { display: none; }
262
#file_flipper .pagelink { color: #0000CC; text-decoration: underline; }
263
#file_flipper #visiblefiles { padding-left: 0.5em; padding-right: 0.5em; }
265
<div id="nav_and_rev" class="heading">
266
<div class="round4"></div>
267
<div class="round2"></div>
268
<div class="round1"></div>
269
<div class="box-inner" id="bub">
270
<div class="bub-top">
271
<div class="pagination" style="margin-left: 2em">
272
<table cellpadding="0" cellspacing="0" class="flipper">
277
<ul class="leftside">
279
<li><a href="/p/numexpr/source/browse/branches/multithread/numexpr/win32/pthread.h?r=203" title="Previous">‹r203</a></li>
291
<div class="" style="vertical-align: top">
292
<div class="src_crumbs src_nav">
293
<strong class="src_nav">Source path: </strong>
294
<span id="crumb_root">
296
<a href="/p/numexpr/source/browse/">svn</a>/ </span>
297
<span id="crumb_links" class="ifClosed"><a href="/p/numexpr/source/browse/trunk/">trunk</a><span class="sp">/ </span><a href="/p/numexpr/source/browse/trunk/numexpr/">numexpr</a><span class="sp">/ </span><a href="/p/numexpr/source/browse/trunk/numexpr/win32/">win32</a><span class="sp">/ </span>pthread.h</span>
303
<div style="clear:both"></div>
308
<style type="text/css">
314
div.draft, div.published {
316
border: 1px solid #999;
318
font-family: arial, sans-serif;
327
div.published .body, div.draft .body {
328
padding: .5em .1em .1em .1em;
330
white-space: pre-wrap;
331
white-space: -moz-pre-wrap;
332
white-space: -pre-wrap;
333
white-space: -o-pre-wrap;
334
word-wrap: break-word;
341
padding: .5em .5em .5em 0;
343
div.draft textarea, div.published textarea {
346
font-family: arial, sans-serif;
352
.nocursor, .nocursor td, .cursor_hidden, .cursor_hidden td {
353
background-color: white;
356
.cursor, .cursor td {
357
background-color: darkblue;
367
<style type="text/css">
369
background-image: url(http://www.gstatic.com/codesite/ph/images/comments.gif); }
371
<table class="opened" id="review_comment_area"
374
<pre><table width="100%"><tr class="nocursor"><td></td></tr></table></pre>
376
<pre><table width="100%" id="nums_table_0"><tr id="gr_svn204_1"
378
><td id="1"><a href="#1">1</a></td></tr
379
><tr id="gr_svn204_2"
381
><td id="2"><a href="#2">2</a></td></tr
382
><tr id="gr_svn204_3"
384
><td id="3"><a href="#3">3</a></td></tr
385
><tr id="gr_svn204_4"
387
><td id="4"><a href="#4">4</a></td></tr
388
><tr id="gr_svn204_5"
390
><td id="5"><a href="#5">5</a></td></tr
391
><tr id="gr_svn204_6"
393
><td id="6"><a href="#6">6</a></td></tr
394
><tr id="gr_svn204_7"
396
><td id="7"><a href="#7">7</a></td></tr
397
><tr id="gr_svn204_8"
399
><td id="8"><a href="#8">8</a></td></tr
400
><tr id="gr_svn204_9"
402
><td id="9"><a href="#9">9</a></td></tr
403
><tr id="gr_svn204_10"
405
><td id="10"><a href="#10">10</a></td></tr
406
><tr id="gr_svn204_11"
408
><td id="11"><a href="#11">11</a></td></tr
409
><tr id="gr_svn204_12"
411
><td id="12"><a href="#12">12</a></td></tr
412
><tr id="gr_svn204_13"
414
><td id="13"><a href="#13">13</a></td></tr
415
><tr id="gr_svn204_14"
417
><td id="14"><a href="#14">14</a></td></tr
418
><tr id="gr_svn204_15"
420
><td id="15"><a href="#15">15</a></td></tr
421
><tr id="gr_svn204_16"
423
><td id="16"><a href="#16">16</a></td></tr
424
><tr id="gr_svn204_17"
426
><td id="17"><a href="#17">17</a></td></tr
427
><tr id="gr_svn204_18"
429
><td id="18"><a href="#18">18</a></td></tr
430
><tr id="gr_svn204_19"
432
><td id="19"><a href="#19">19</a></td></tr
433
><tr id="gr_svn204_20"
435
><td id="20"><a href="#20">20</a></td></tr
436
><tr id="gr_svn204_21"
438
><td id="21"><a href="#21">21</a></td></tr
439
><tr id="gr_svn204_22"
441
><td id="22"><a href="#22">22</a></td></tr
442
><tr id="gr_svn204_23"
444
><td id="23"><a href="#23">23</a></td></tr
445
><tr id="gr_svn204_24"
447
><td id="24"><a href="#24">24</a></td></tr
448
><tr id="gr_svn204_25"
450
><td id="25"><a href="#25">25</a></td></tr
451
><tr id="gr_svn204_26"
453
><td id="26"><a href="#26">26</a></td></tr
454
><tr id="gr_svn204_27"
456
><td id="27"><a href="#27">27</a></td></tr
457
><tr id="gr_svn204_28"
459
><td id="28"><a href="#28">28</a></td></tr
460
><tr id="gr_svn204_29"
462
><td id="29"><a href="#29">29</a></td></tr
463
><tr id="gr_svn204_30"
465
><td id="30"><a href="#30">30</a></td></tr
466
><tr id="gr_svn204_31"
468
><td id="31"><a href="#31">31</a></td></tr
469
><tr id="gr_svn204_32"
471
><td id="32"><a href="#32">32</a></td></tr
472
><tr id="gr_svn204_33"
474
><td id="33"><a href="#33">33</a></td></tr
475
><tr id="gr_svn204_34"
477
><td id="34"><a href="#34">34</a></td></tr
478
><tr id="gr_svn204_35"
480
><td id="35"><a href="#35">35</a></td></tr
481
><tr id="gr_svn204_36"
483
><td id="36"><a href="#36">36</a></td></tr
484
><tr id="gr_svn204_37"
486
><td id="37"><a href="#37">37</a></td></tr
487
><tr id="gr_svn204_38"
489
><td id="38"><a href="#38">38</a></td></tr
490
><tr id="gr_svn204_39"
492
><td id="39"><a href="#39">39</a></td></tr
493
><tr id="gr_svn204_40"
495
><td id="40"><a href="#40">40</a></td></tr
496
><tr id="gr_svn204_41"
498
><td id="41"><a href="#41">41</a></td></tr
499
><tr id="gr_svn204_42"
501
><td id="42"><a href="#42">42</a></td></tr
502
><tr id="gr_svn204_43"
504
><td id="43"><a href="#43">43</a></td></tr
505
><tr id="gr_svn204_44"
507
><td id="44"><a href="#44">44</a></td></tr
508
><tr id="gr_svn204_45"
510
><td id="45"><a href="#45">45</a></td></tr
511
><tr id="gr_svn204_46"
513
><td id="46"><a href="#46">46</a></td></tr
514
><tr id="gr_svn204_47"
516
><td id="47"><a href="#47">47</a></td></tr
517
><tr id="gr_svn204_48"
519
><td id="48"><a href="#48">48</a></td></tr
520
><tr id="gr_svn204_49"
522
><td id="49"><a href="#49">49</a></td></tr
523
><tr id="gr_svn204_50"
525
><td id="50"><a href="#50">50</a></td></tr
526
><tr id="gr_svn204_51"
528
><td id="51"><a href="#51">51</a></td></tr
529
><tr id="gr_svn204_52"
531
><td id="52"><a href="#52">52</a></td></tr
532
><tr id="gr_svn204_53"
534
><td id="53"><a href="#53">53</a></td></tr
535
><tr id="gr_svn204_54"
537
><td id="54"><a href="#54">54</a></td></tr
538
><tr id="gr_svn204_55"
540
><td id="55"><a href="#55">55</a></td></tr
541
><tr id="gr_svn204_56"
543
><td id="56"><a href="#56">56</a></td></tr
544
><tr id="gr_svn204_57"
546
><td id="57"><a href="#57">57</a></td></tr
547
><tr id="gr_svn204_58"
549
><td id="58"><a href="#58">58</a></td></tr
550
><tr id="gr_svn204_59"
552
><td id="59"><a href="#59">59</a></td></tr
553
><tr id="gr_svn204_60"
555
><td id="60"><a href="#60">60</a></td></tr
556
><tr id="gr_svn204_61"
558
><td id="61"><a href="#61">61</a></td></tr
559
><tr id="gr_svn204_62"
561
><td id="62"><a href="#62">62</a></td></tr
562
><tr id="gr_svn204_63"
564
><td id="63"><a href="#63">63</a></td></tr
565
><tr id="gr_svn204_64"
567
><td id="64"><a href="#64">64</a></td></tr
568
><tr id="gr_svn204_65"
570
><td id="65"><a href="#65">65</a></td></tr
571
><tr id="gr_svn204_66"
573
><td id="66"><a href="#66">66</a></td></tr
574
><tr id="gr_svn204_67"
576
><td id="67"><a href="#67">67</a></td></tr
577
><tr id="gr_svn204_68"
579
><td id="68"><a href="#68">68</a></td></tr
582
<pre><table width="100%"><tr class="nocursor"><td></td></tr></table></pre>
585
<pre class="prettyprint"><table width="100%"><tr class="cursor_stop cursor_hidden"><td></td></tr></table></pre>
587
<pre class="prettyprint "><table id="src_table_0"><tr
590
><td class="source">/*<br></td></tr
594
><td class="source"> * Header used to adapt pthread-based POSIX code to Windows API threads.<br></td></tr
598
><td class="source"> *<br></td></tr
602
><td class="source"> * Copyright (C) 2009 Andrzej K. Haczewski <ahaczewski@gmail.com><br></td></tr
606
><td class="source"> */<br></td></tr
610
><td class="source"><br></td></tr
614
><td class="source">#ifndef PTHREAD_H<br></td></tr
618
><td class="source">#define PTHREAD_H<br></td></tr
622
><td class="source"><br></td></tr
626
><td class="source">#ifndef WIN32_LEAN_AND_MEAN<br></td></tr
630
><td class="source">#define WIN32_LEAN_AND_MEAN<br></td></tr
634
><td class="source">#endif<br></td></tr
638
><td class="source"><br></td></tr
642
><td class="source">#include <windows.h><br></td></tr
646
><td class="source"><br></td></tr
650
><td class="source">/*<br></td></tr
654
><td class="source"> * Defines that adapt Windows API threads to pthreads API<br></td></tr
658
><td class="source"> */<br></td></tr
662
><td class="source">#define pthread_mutex_t CRITICAL_SECTION<br></td></tr
666
><td class="source"><br></td></tr
670
><td class="source">#define pthread_mutex_init(a,b) InitializeCriticalSection((a))<br></td></tr
674
><td class="source">#define pthread_mutex_destroy(a) DeleteCriticalSection((a))<br></td></tr
678
><td class="source">#define pthread_mutex_lock EnterCriticalSection<br></td></tr
682
><td class="source">#define pthread_mutex_unlock LeaveCriticalSection<br></td></tr
686
><td class="source"><br></td></tr
690
><td class="source">/*<br></td></tr
694
><td class="source"> * Implement simple condition variable for Windows threads, based on ACE<br></td></tr
698
><td class="source"> * implementation.<br></td></tr
702
><td class="source"> *<br></td></tr
706
><td class="source"> * See original implementation: http://bit.ly/1vkDjo<br></td></tr
710
><td class="source"> * ACE homepage: http://www.cse.wustl.edu/~schmidt/ACE.html<br></td></tr
714
><td class="source"> * See also: http://www.cse.wustl.edu/~schmidt/win32-cv-1.html<br></td></tr
718
><td class="source"> */<br></td></tr
722
><td class="source">typedef struct {<br></td></tr
726
><td class="source"> LONG waiters;<br></td></tr
730
><td class="source"> int was_broadcast;<br></td></tr
734
><td class="source"> CRITICAL_SECTION waiters_lock;<br></td></tr
738
><td class="source"> HANDLE sema;<br></td></tr
742
><td class="source"> HANDLE continue_broadcast;<br></td></tr
746
><td class="source">} pthread_cond_t;<br></td></tr
750
><td class="source"><br></td></tr
754
><td class="source">extern int pthread_cond_init(pthread_cond_t *cond, const void *unused);<br></td></tr
758
><td class="source">extern int pthread_cond_destroy(pthread_cond_t *cond);<br></td></tr
762
><td class="source">extern int pthread_cond_wait(pthread_cond_t *cond, CRITICAL_SECTION *mutex);<br></td></tr
766
><td class="source">extern int pthread_cond_signal(pthread_cond_t *cond);<br></td></tr
770
><td class="source">extern int pthread_cond_broadcast(pthread_cond_t *cond);<br></td></tr
774
><td class="source"><br></td></tr
778
><td class="source">/*<br></td></tr
782
><td class="source"> * Simple thread creation implementation using pthread API<br></td></tr
786
><td class="source"> */<br></td></tr
790
><td class="source">typedef struct {<br></td></tr
794
><td class="source"> HANDLE handle;<br></td></tr
798
><td class="source"> void *(*start_routine)(void*);<br></td></tr
802
><td class="source"> void *arg;<br></td></tr
806
><td class="source">} pthread_t;<br></td></tr
810
><td class="source"><br></td></tr
814
><td class="source">extern int pthread_create(pthread_t *thread, const void *unused,<br></td></tr
818
><td class="source"> void *(*start_routine)(void*), void *arg);<br></td></tr
822
><td class="source"><br></td></tr
826
><td class="source">/*<br></td></tr
830
><td class="source"> * To avoid the need of copying a struct, we use small macro wrapper to pass<br></td></tr
834
><td class="source"> * pointer to win32_pthread_join instead.<br></td></tr
838
><td class="source"> */<br></td></tr
842
><td class="source">#define pthread_join(a, b) win32_pthread_join(&(a), (b))<br></td></tr
846
><td class="source"><br></td></tr
850
><td class="source">extern int win32_pthread_join(pthread_t *thread, void **value_ptr);<br></td></tr
854
><td class="source"><br></td></tr
858
><td class="source">#endif /* PTHREAD_H */<br></td></tr
861
<pre class="prettyprint"><table width="100%"><tr class="cursor_stop cursor_hidden"><td></td></tr></table></pre>
864
<script type="text/javascript">
865
var lineNumUnderMouse = -1;
867
function gutterOver(num) {
869
var newTR = document.getElementById('gr_svn204_' + num);
871
newTR.className = 'undermouse';
873
lineNumUnderMouse = num;
875
function gutterOut() {
876
if (lineNumUnderMouse != -1) {
877
var oldTR = document.getElementById(
878
'gr_svn204_' + lineNumUnderMouse);
880
oldTR.className = '';
882
lineNumUnderMouse = -1;
885
var numsGenState = {table_base_id: 'nums_table_'};
886
var srcGenState = {table_base_id: 'src_table_'};
887
var alignerRunning = false;
888
var startOver = false;
889
function setLineNumberHeights() {
890
if (alignerRunning) {
894
numsGenState.chunk_id = 0;
895
numsGenState.table = document.getElementById('nums_table_0');
896
numsGenState.row_num = 0;
897
srcGenState.chunk_id = 0;
898
srcGenState.table = document.getElementById('src_table_0');
899
srcGenState.row_num = 0;
900
alignerRunning = true;
901
continueToSetLineNumberHeights();
903
function rowGenerator(genState) {
904
if (genState.row_num < genState.table.rows.length) {
905
var currentRow = genState.table.rows[genState.row_num];
909
var newTable = document.getElementById(
910
genState.table_base_id + (genState.chunk_id + 1));
913
genState.row_num = 0;
914
genState.table = newTable;
915
return genState.table.rows[0];
919
var MAX_ROWS_PER_PASS = 1000;
920
function continueToSetLineNumberHeights() {
921
var rowsInThisPass = 0;
924
while (numRow && srcRow && rowsInThisPass < MAX_ROWS_PER_PASS) {
925
numRow = rowGenerator(numsGenState);
926
srcRow = rowGenerator(srcGenState);
928
if (numRow && srcRow) {
929
if (numRow.offsetHeight != srcRow.offsetHeight) {
930
numRow.firstChild.style.height = srcRow.offsetHeight + 'px';
934
if (rowsInThisPass >= MAX_ROWS_PER_PASS) {
935
setTimeout(continueToSetLineNumberHeights, 10);
937
alignerRunning = false;
940
setTimeout(setLineNumberHeights, 500);
944
// Do 2 complete passes, because there can be races
945
// between this code and prettify.
947
setTimeout(setLineNumberHeights, 250);
948
window.onresize = setLineNumberHeights;
954
<div style="text-align:right">
955
<a class="ifCollapse" href="#" onclick="_toggleMeta('', 'p', 'numexpr', this)">Show details</a>
956
<a class="ifExpand" href="#" onclick="_toggleMeta('', 'p', 'numexpr', this)">Hide details</a>
958
<div class="ifExpand">
960
<div class="pmeta_bubble_bg" style="border:1px solid white">
961
<div class="round4"></div>
962
<div class="round2"></div>
963
<div class="round1"></div>
964
<div class="box-inner">
968
<a href="/p/numexpr/source/detail?spec=svn234&r=204">r204</a>
970
on Jul 30 (5 days ago)
971
<a href="/p/numexpr/source/diff?spec=svn234&r=204&format=side&path=/trunk/numexpr/win32/pthread.h&old_path=/branches/multithread/numexpr/win32/pthread.h&old=194">Diff</a>
973
<pre>Merged branch multithreaded into trunk.</pre>
981
<script type="text/javascript">
982
var detail_url = '/p/numexpr/source/detail?r=204&spec=svn234';
983
var publish_url = '/p/numexpr/source/detail?r=204&spec=svn234#publish';
984
// describe the paths of this revision in javascript.
985
var changed_paths = [];
986
var changed_urls = [];
988
changed_paths.push('/trunk');
989
changed_urls.push('/p/numexpr/source/browse/trunk?r=204&spec=svn234');
992
changed_paths.push('/trunk/README.txt');
993
changed_urls.push('/p/numexpr/source/browse/trunk/README.txt?r=204&spec=svn234');
996
changed_paths.push('/trunk/RELEASE_NOTES.txt');
997
changed_urls.push('/p/numexpr/source/browse/trunk/RELEASE_NOTES.txt?r=204&spec=svn234');
1000
changed_paths.push('/trunk/bench/poly.c');
1001
changed_urls.push('/p/numexpr/source/browse/trunk/bench/poly.c?r=204&spec=svn234');
1004
changed_paths.push('/trunk/bench/poly.py');
1005
changed_urls.push('/p/numexpr/source/browse/trunk/bench/poly.py?r=204&spec=svn234');
1008
changed_paths.push('/trunk/bench/unaligned-simple.py');
1009
changed_urls.push('/p/numexpr/source/browse/trunk/bench/unaligned-simple.py?r=204&spec=svn234');
1012
changed_paths.push('/trunk/numexpr/__init__.py');
1013
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/__init__.py?r=204&spec=svn234');
1016
changed_paths.push('/trunk/numexpr/interp_body.c');
1017
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/interp_body.c?r=204&spec=svn234');
1020
changed_paths.push('/trunk/numexpr/interpreter.c');
1021
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/interpreter.c?r=204&spec=svn234');
1024
changed_paths.push('/trunk/numexpr/tests/test_numexpr.py');
1025
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/tests/test_numexpr.py?r=204&spec=svn234');
1028
changed_paths.push('/trunk/numexpr/utils.py');
1029
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/utils.py?r=204&spec=svn234');
1032
changed_paths.push('/trunk/numexpr/win32');
1033
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/win32?r=204&spec=svn234');
1036
changed_paths.push('/trunk/numexpr/win32/pthread.c');
1037
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/win32/pthread.c?r=204&spec=svn234');
1040
changed_paths.push('/trunk/numexpr/win32/pthread.h');
1041
changed_urls.push('/p/numexpr/source/browse/trunk/numexpr/win32/pthread.h?r=204&spec=svn234');
1043
var selected_path = '/trunk/numexpr/win32/pthread.h';
1046
changed_paths.push('/trunk/setup.py');
1047
changed_urls.push('/p/numexpr/source/browse/trunk/setup.py?r=204&spec=svn234');
1050
function getCurrentPageIndex() {
1051
for (var i = 0; i < changed_paths.length; i++) {
1052
if (selected_path == changed_paths[i]) {
1057
function getNextPage() {
1058
var i = getCurrentPageIndex();
1059
if (i < changed_paths.length - 1) {
1060
return changed_urls[i + 1];
1064
function getPreviousPage() {
1065
var i = getCurrentPageIndex();
1067
return changed_urls[i - 1];
1071
function gotoNextPage() {
1072
var page = getNextPage();
1076
window.location = page;
1078
function gotoPreviousPage() {
1079
var page = getPreviousPage();
1083
window.location = page;
1085
function gotoDetailPage() {
1086
window.location = detail_url;
1088
function gotoPublishPage() {
1089
window.location = publish_url;
1093
<style type="text/css">
1095
border-top: 3px solid white;
1100
vertical-align: middle;
1102
#review_nav select {
1106
<div id="review_nav">
1107
<table><tr><td>Go to: </td><td>
1108
<select name="files_in_rev" onchange="window.location=this.value">
1110
<option value="/p/numexpr/source/browse/trunk?r=204&spec=svn234"
1114
<option value="/p/numexpr/source/browse/trunk/README.txt?r=204&spec=svn234"
1116
>/trunk/README.txt</option>
1118
<option value="/p/numexpr/source/browse/trunk/RELEASE_NOTES.txt?r=204&spec=svn234"
1120
>/trunk/RELEASE_NOTES.txt</option>
1122
<option value="/p/numexpr/source/browse/trunk/bench/poly.c?r=204&spec=svn234"
1124
>/trunk/bench/poly.c</option>
1126
<option value="/p/numexpr/source/browse/trunk/bench/poly.py?r=204&spec=svn234"
1128
>/trunk/bench/poly.py</option>
1130
<option value="/p/numexpr/source/browse/trunk/bench/unaligned-simple.py?r=204&spec=svn234"
1132
>/trunk/bench/unaligned-simple.py</option>
1134
<option value="/p/numexpr/source/browse/trunk/numexpr/__init__.py?r=204&spec=svn234"
1136
>/trunk/numexpr/__init__.py</option>
1138
<option value="/p/numexpr/source/browse/trunk/numexpr/interp_body.c?r=204&spec=svn234"
1140
>/trunk/numexpr/interp_body.c</option>
1142
<option value="/p/numexpr/source/browse/trunk/numexpr/interpreter.c?r=204&spec=svn234"
1144
>/trunk/numexpr/interpreter.c</option>
1146
<option value="/p/numexpr/source/browse/trunk/numexpr/tests/test_numexpr.py?r=204&spec=svn234"
1148
>...nk/numexpr/tests/test_numexpr.py</option>
1150
<option value="/p/numexpr/source/browse/trunk/numexpr/utils.py?r=204&spec=svn234"
1152
>/trunk/numexpr/utils.py</option>
1154
<option value="/p/numexpr/source/browse/trunk/numexpr/win32?r=204&spec=svn234"
1156
>/trunk/numexpr/win32</option>
1158
<option value="/p/numexpr/source/browse/trunk/numexpr/win32/pthread.c?r=204&spec=svn234"
1160
>/trunk/numexpr/win32/pthread.c</option>
1162
<option value="/p/numexpr/source/browse/trunk/numexpr/win32/pthread.h?r=204&spec=svn234"
1164
>/trunk/numexpr/win32/pthread.h</option>
1166
<option value="/p/numexpr/source/browse/trunk/setup.py?r=204&spec=svn234"
1168
>/trunk/setup.py</option>
1178
<div style="white-space:nowrap">
1180
<a href="https://www.google.com/accounts/ServiceLogin?service=code&ltmpl=phosting&continue=http%3A%2F%2Fcode.google.com%2Fp%2Fnumexpr%2Fsource%2Fbrowse%2Ftrunk%2Fnumexpr%2Fwin32%2Fpthread.h&followup=http%3A%2F%2Fcode.google.com%2Fp%2Fnumexpr%2Fsource%2Fbrowse%2Ftrunk%2Fnumexpr%2Fwin32%2Fpthread.h"
1181
>Sign in</a> to write a code review</div>
1189
<div class="round1"></div>
1190
<div class="round2"></div>
1191
<div class="round4"></div>
1193
<div class="pmeta_bubble_bg" style="border:1px solid white">
1194
<div class="round4"></div>
1195
<div class="round2"></div>
1196
<div class="round1"></div>
1197
<div class="box-inner">
1198
<div id="older_bubble">
1199
<p>Older revisions</p>
1202
<div class="closed" style="margin-bottom:3px;" >
1203
<img class="ifClosed" onclick="_toggleHidden(this)" src="http://www.gstatic.com/codesite/ph/images/plus.gif" >
1204
<img class="ifOpened" onclick="_toggleHidden(this)" src="http://www.gstatic.com/codesite/ph/images/minus.gif" >
1205
<a href="/p/numexpr/source/detail?spec=svn234&r=194">r194</a>
1207
on Jul 29 (6 days ago)
1208
<a href="/p/numexpr/source/diff?spec=svn234&r=194&format=side&path=/branches/multithread/numexpr/win32/pthread.h&old_path=/branches/multithread/numexpr/win32/pthread.h&old=0">Diff</a>
1210
<pre class="ifOpened">Attempt to avoid the use of the
1211
pthreads library on Win32. Using the
1212
pthreads API emulation for Win that
1217
<a href="/p/numexpr/source/list?path=/trunk/numexpr/win32/pthread.h&start=204">All revisions of this file</a>
1220
<div class="round1"></div>
1221
<div class="round2"></div>
1222
<div class="round4"></div>
1224
<div class="pmeta_bubble_bg" style="border:1px solid white">
1225
<div class="round4"></div>
1226
<div class="round2"></div>
1227
<div class="round1"></div>
1228
<div class="box-inner">
1229
<div id="fileinfo_bubble">
1232
<div>Size: 1888 bytes,
1235
<div><a href="http://numexpr.googlecode.com/svn/trunk/numexpr/win32/pthread.h">View raw file</a></div>
1239
<div class="round1"></div>
1240
<div class="round2"></div>
1241
<div class="round4"></div>
1250
<script src="http://www.gstatic.com/codesite/ph/7642550995449508181/js/prettify/prettify.js"></script>
1252
<script type="text/javascript">prettyPrint();</script>
1254
<script src="http://www.gstatic.com/codesite/ph/7642550995449508181/js/source_file_scripts.js"></script>
1256
<script type="text/javascript" src="http://kibbles.googlecode.com/files/kibbles-1.3.1.comp.js"></script>
1257
<script type="text/javascript">
1258
var lastStop = null;
1259
var initilized = false;
1261
function updateCursor(next, prev) {
1262
if (prev && prev.element) {
1263
prev.element.className = 'cursor_stop cursor_hidden';
1265
if (next && next.element) {
1266
next.element.className = 'cursor_stop cursor';
1267
lastStop = next.index;
1271
function pubRevealed(data) {
1272
updateCursorForCell(data.cellId, 'cursor_stop cursor_hidden');
1278
function draftRevealed(data) {
1279
updateCursorForCell(data.cellId, 'cursor_stop cursor_hidden');
1285
function draftDestroyed(data) {
1286
updateCursorForCell(data.cellId, 'nocursor');
1291
function reloadCursors() {
1292
kibbles.skipper.reset();
1294
if (lastStop != null) {
1295
kibbles.skipper.setCurrentStop(lastStop);
1298
// possibly the simplest way to insert any newly added comments
1299
// is to update the class of the corresponding cursor row,
1300
// then refresh the entire list of rows.
1301
function updateCursorForCell(cellId, className) {
1302
var cell = document.getElementById(cellId);
1303
// we have to go two rows back to find the cursor location
1304
var row = getPreviousElement(cell.parentNode);
1305
row.className = className;
1307
// returns the previous element, ignores text nodes.
1308
function getPreviousElement(e) {
1309
var element = e.previousSibling;
1310
if (element.nodeType == 3) {
1311
element = element.previousSibling;
1313
if (element && element.tagName) {
1317
function loadCursors() {
1318
// register our elements with skipper
1319
var elements = CR_getElements('*', 'cursor_stop');
1320
var len = elements.length;
1321
for (var i = 0; i < len; i++) {
1322
var element = elements[i];
1323
element.className = 'cursor_stop cursor_hidden';
1324
kibbles.skipper.append(element);
1327
function toggleComments() {
1328
CR_toggleCommentDisplay();
1331
function keysOnLoadHandler() {
1333
kibbles.skipper.addStopListener(
1334
kibbles.skipper.LISTENER_TYPE.PRE, updateCursor);
1335
// Set the 'offset' option to return the middle of the client area
1336
// an option can be a static value, or a callback
1337
kibbles.skipper.setOption('padding_top', 50);
1338
// Set the 'offset' option to return the middle of the client area
1339
// an option can be a static value, or a callback
1340
kibbles.skipper.setOption('padding_bottom', 100);
1341
// Register our keys
1342
kibbles.skipper.addFwdKey("n");
1343
kibbles.skipper.addRevKey("p");
1344
kibbles.keys.addKeyPressListener(
1345
'u', function() { window.location = detail_url; });
1346
kibbles.keys.addKeyPressListener(
1347
'r', function() { window.location = detail_url + '#publish'; });
1349
kibbles.keys.addKeyPressListener('j', gotoNextPage);
1350
kibbles.keys.addKeyPressListener('k', gotoPreviousPage);
1354
window.onload = function() {keysOnLoadHandler();};
1357
<!-- code review support -->
1358
<script src="http://www.gstatic.com/codesite/ph/7642550995449508181/js/code_review_scripts.js"></script>
1359
<script type="text/javascript">
1361
// the comment form template
1362
var form = '<div class="draft"><div class="header"><span class="title">Draft comment:</span></div>' +
1363
'<div class="body"><form onsubmit="return false;"><textarea id="$ID">$BODY</textarea><br>$ACTIONS</form></div>' +
1365
// the comment "plate" template used for both draft and published comment "plates".
1366
var draft_comment = '<div class="draft" ondblclick="$ONDBLCLICK">' +
1367
'<div class="header"><span class="title">Draft comment:</span><span class="actions">$ACTIONS</span></div>' +
1368
'<pre id="$ID" class="body">$BODY</pre>' +
1370
var published_comment = '<div class="published">' +
1371
'<div class="header"><span class="title"><a href="$PROFILE_URL">$AUTHOR:</a></span><div>' +
1372
'<pre id="$ID" class="body">$BODY</pre>' +
1375
function showPublishInstructions() {
1376
var element = document.getElementById('review_instr');
1378
element.className = 'opened';
1381
function revsOnLoadHandler() {
1382
// register our source container with the commenting code
1383
var paths = {'svn204': '/trunk/numexpr/win32/pthread.h'}
1384
CR_setup('', 'p', 'numexpr', '', 'svn234', paths,
1385
'', CR_BrowseIntegrationFactory);
1386
// register our hidden ui elements with the code commenting code ui builder.
1387
CR_registerLayoutElement('form', form);
1388
CR_registerLayoutElement('draft_comment', draft_comment);
1389
CR_registerLayoutElement('published_comment', published_comment);
1391
CR_registerActivityListener(CR_ACTIVITY_TYPE.REVEAL_DRAFT_PLATE, showPublishInstructions);
1393
CR_registerActivityListener(CR_ACTIVITY_TYPE.REVEAL_PUB_PLATE, pubRevealed);
1394
CR_registerActivityListener(CR_ACTIVITY_TYPE.REVEAL_DRAFT_PLATE, draftRevealed);
1395
CR_registerActivityListener(CR_ACTIVITY_TYPE.DISCARD_DRAFT_COMMENT, draftDestroyed);
1405
var initilized = true;
1408
window.onload = function() {keysOnLoadHandler(); revsOnLoadHandler();};
1410
<script type="text/javascript" src="http://www.gstatic.com/codesite/ph/7642550995449508181/js/dit_scripts.js"></script>
1414
<script type="text/javascript" src="http://www.gstatic.com/codesite/ph/7642550995449508181/js/core_scripts_20081103.js"></script>
1415
<script type="text/javascript" src="/js/codesite_product_dictionary_ph.pack.04102009.js"></script>
1417
<div id="footer" dir="ltr">
1422
<a href="/projecthosting/terms.html">Terms</a> -
1423
<a href="http://www.google.com/privacy.html">Privacy</a> -
1424
<a href="/p/support/">Project Hosting Help</a>
1429
<div class="hostedBy" style="margin-top: -20px;">
1430
<span style="vertical-align: top;">Powered by <a href="http://code.google.com/projecthosting/">Google Project Hosting</a></span>