return 0;
}
+#define SWAP(a,b,t) {t tmp; tmp=a; a=b; b=tmp;}
+
static char Decoder_decode__doc__[] = "\
Decode a list shares into a list of segments.\n\
@param shares a sequence of buffers containing share data (for best performance, make it a tuple instead of a list)\n\
oldsz = sz;
}
+ /* move src packets into position */
+ for (i=0; i<self->kk;) {
+ if (csharenums[i] >= self->kk || csharenums[i] == i)
+ i++;
+ else {
+ /* put pkt in the right position. */
+ unsigned char c = csharenums[i];
+
+ SWAP (csharenums[i], csharenums[c], int);
+ SWAP (cshares[i], cshares[c], gf*);
+ SWAP (fastsharesitems[i], fastsharesitems[c], PyObject*);
+ }
+ }
+
/* Allocate space for all of the recovered shares. */
for (i=0; i<needtorecover; i++) {
recoveredpystrs[i] = PyString_FromStringAndSize(NULL, sz);
import fec
-def shuffle(nums_and_shares):
- """ Make sure that if nums_and_shares[i][0] < len(nums_and_shares), that i == nums_and_shares[i][0]. """
- i = 0
- while i < len(nums_and_shares):
- num, share = nums_and_shares[i]
- if num >= len(nums_and_shares) or num == i:
- i += 1
- else:
- nums_and_shares[i] = nums_and_shares[num]
- nums_and_shares[num] = (num, share,)
- _assert([ (i, (num, share,),) for (i, (num, share,),) in enumerate(nums_and_shares) if num < len(nums_and_shares) and num != i ] == [], [ (i, (num, share,),) for (i, (num, share,),) in enumerate(nums_and_shares) if num < len(nums_and_shares) and num != i ])
-
def _h(k, m, ss):
# sys.stdout.write("k: %s, m: %s, len(ss): %r, len(ss[0]): %r" % (k, m, len(ss), len(ss[0]),)) ; sys.stdout.flush()
encer = fec.Encoder(k, m)
_assert(isinstance(nums_and_shares, list), nums_and_shares)
_assert(len(nums_and_shares) == m, len(nums_and_shares), m)
nums_and_shares = random.sample(nums_and_shares, k)
- shuffle(nums_and_shares)
shares = [ x[1] for x in nums_and_shares ]
nums = [ x[0] for x in nums_and_shares ]
# sys.stdout.write("about to construct Decoder.\n") ; sys.stdout.flush()