Skip to content

Instantly share code, notes, and snippets.

@AdamBrouwersHarries
Created August 1, 2015 11:38
Show Gist options
  • Save AdamBrouwersHarries/6df0d5134a7cffe1fcb5 to your computer and use it in GitHub Desktop.
Save AdamBrouwersHarries/6df0d5134a7cffe1fcb5 to your computer and use it in GitHub Desktop.
Zipping two sparse arrays
typedef struct Tuple2
{
int a;
int b;
} Tuple2;
// array lengths
int sparseLength;
int denseLength;
// arrays
Tuple2* sparseArray;
int* denseArray;
// pointers into arrays
int sparsePointer = 0;
int densePointer = 0
int acc;
while(sparsePointer < sparseLength)
Tuple2 tSpElem = sparseArray[i];
while(!(matchPredicate(sparsePointer, densePointer)) && densePointer<denseLength){
densePointer++;
if(denseFinished(densePointer))
{
goto finished;
}
}
acc += accFunction(sparsePointer, densePointer);
sparsePointer++;
if(sparseFinished(sparsePointer)){
goto finished;
}
}
finished:
return acc;
@michel-steuwer
Copy link

typedef struct Tuple2
{
  int a;
  int b;
} Tuple2;

// array lengths
int sparseLength;
int denseLength;

// arrays
Tuple2* sparseArray;
int* denseArray;

// pointers into arrays
//
// BEGIN
int densePointer = 0

int acc;
for(int sparsePointer = 0; sparsePointer < sparseLength; sparsePointer += 1) {
  Tuple2 tSpElem = sparseArray[sparsePointer];
  v__16 = matchPredicate(sparseArray[sparsePointer], denseArray[densePointer]);
  while(!(v__16)) {
    densePointer++;
    v__17 = denseFinished(denseArray[densePointer]);
    if(v__17 || (densePointer == denseLength-1)) {
      goto finished;
    }
    v__16 = matchPredicate(sparseArray[sparsePointer], denseArray[densePointer]);
  }
  acc = accFunction(acc, sparseArray[sparsePointer], denseArray[densePointer]);
  v__18 = sparseFinished(sparsePointer);
  if(v__18){
    goto finished;
  }
}

finished:
// END
  return acc;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment