                 rank_next = problem->data_slices[0]->d_hrank_next;
             }
 
-            //swap rank_curr and rank_next
-            util::MemsetCopyVectorKernel<<<128, 128>>>(rank_curr, rank_next, nodes); 
+            // copy next to curr and reset next
+            util::MemsetCopyVectorKernel<<<128, 128>>>(rank_curr, rank_next, nodes);
             util::MemsetKernel<<<128, 128>>>(rank_next, (Value)0.0, nodes);
         }
 
+    // This enactor defines the SALSA high-level algorithm.
     template<
         typename AdvancePolicy,
         typename FilterPolicy,

                                         gunrock::oprtr::advance::V2E);
                         }

                         //Update hub rank and authority ranks using two Advance operators until reach
                         //maximum iteration number
                         int iteration = 0;
                         while (true) {
                             util::MemsetIdxKernel<<<BLOCK, THREAD>>>(g_slice->ping_pong_working_queue[selector], g_slice->edges);
                             SizeT queue_length = g_slice->edges;

                             gunrock::oprtr::advance::Kernel
                                 <AdvancePolicy, SALSAProblem, ABackwardFunctor>
                                 <<<advance_grid_size, AdvancePolicy::THREADS>>>(

// The enactor defines how a graph primitive runs. It calls traversal
// (advance and filter operators) and computation (functors).

class SalsaEnactor : public EnactorBase {

    // For SALSA, Constructor, Destructor, and Setup functions are ignored

    // This user-defined function swaps current and next rank pointers
    template <typename ProblemData>
        void SwapRank(ProblemData *problem, int is_hub, int nodes)
        {
