Browse Source

added lazy deletion for requests, bug fix for processes

Luke Miller 3 years ago
parent
commit
37c7f337a7
1 changed files with 21 additions and 3 deletions
  1. 21 3
      modpol/orgs/orgs.lua

+ 21 - 3
modpol/orgs/orgs.lua

@@ -14,7 +14,6 @@ function temp_org()
         policies = {},
         processes = {},
         requests = {},
-        request_count = 0,
         members = {},
         parent = nil,
         children = {}
@@ -288,7 +287,7 @@ end
 
 
 -- ================================
---
+-- creates a new process linked to a request id
 function modpol.orgs:create_process(request_id)
     local new_process = {
         object = "I am a process",
@@ -305,7 +304,7 @@ function modpol.orgs:create_process(request_id)
 
     -- attempts to fill empty spots in list, otherwise appends to end
     if empty_index then
-        self.processes[index] = new_process
+        self.processes[empty_index] = new_process
     else
         table.insert(self.processes, new_process)
     end
@@ -369,4 +368,23 @@ function modpol.orgs:make_request(request)
     self.requests[self.request_count] = request
     return self.request_count
 
+    -- linear search for empty process slots (lazy deletion)
+    for k, v in ipairs(self.requests) do
+        if v == 'deleted' then
+            local empty_index = k
+            break
+        do
+    end
+
+    -- attempts to fill empty spots in list, otherwise appends to end
+    if empty_index then
+        self.requests[empty_index] = request
+        return empty_index
+    else
+        table.insert(self.requests, request)
+        -- finds end of list to return current request's id
+        local count = 0
+        for k, v in ipairs(t) do count = count + 1 end
+        return count
+    end
 end