Commit 20e71a6

Richard Luby <richluby@gmail.com>
2016-12-08 08:29:26
refactored recordMap into recordArray
recordArray stores flat list of all records. records maintain list of categories related to itself
1 parent f59e5c8
question.go
@@ -12,17 +12,7 @@ import (
 // assignCategory figures out what category
 // this question is a member of
 func assignCategory(category string, record *Record) {
-	if _, inMap := recordMap[category]; inMap != true {
-		recordMap[category] = []Record{}
-		categoricalData.CategoryPath = append(categoricalData.CategoryPath, category)
-		record.Category = len(categoricalData.CategoryPath) - 1
-	} else {
-		for i, value := range categoricalData.CategoryPath {
-			if value == category {
-				record.Category = i
-			}
-		}
-	}
+
 }
 
 // parseLine parses a csv line and returns a single record
@@ -44,7 +34,7 @@ func parseLine(line string) error {
 		record.Reference = strings.TrimSpace(tokens[3])
 	}
 	assignCategory(category, &record)
-	recordMap[category] = append(recordMap[category], record)
+	recordsArray = append(recordsArray, record)
 	return nil
 }
 
server.go
@@ -105,11 +105,7 @@ func ExecuteServer() {
 		log.Printf("Failed to load questions due to error: %+v", err)
 		os.Exit(EXIT_CODE.FILE_IO_ERROR)
 	}
-	numQuestions := 0
-	for _, recordArray := range recordMap {
-		numQuestions += len(recordArray)
-	}
-	log.Printf("Loaded %d questions from %s with %d categories.", numQuestions, serverConfig.QUESTIONS, len(categoricalData.CategoryPath))
+	log.Printf("Loaded %d questions from %s with %d categories.", len(recordsArray), serverConfig.QUESTIONS, len(categoricalData.CategoryPath))
 	rand.Seed(time.Now().Unix())
 	Listen(serverConfig)
 }
serverHandlers.go
@@ -25,21 +25,8 @@ var userTestsLock = sync.RWMutex{}
 func getRecordForCategory(category string) Record {
 	mapLock.Lock()
 	defer mapLock.Unlock()
-	length := len(recordMap[category])
-	if length == 0 {
-		recordMap[category] = usedRecordMap[category]
-		usedRecordMap[category] = usedRecordMap[category][0:0]
-		length = len(recordMap[category])
-	}
-	recordIndex := rand.Intn(length)
-	record := recordMap[category][recordIndex]
-	recordMap[category][recordIndex] = recordMap[category][length-1]
-	recordMap[category] = recordMap[category][:length-1] //shrink length by one
-	if usedRecordMap[category] == nil {
-		usedRecordMap[category] = []Record{}
-	}
-	usedRecordMap[category] = append(usedRecordMap[category], record)
-	return record
+
+	return Record{}
 }
 
 // buildRecordArray builds an array of Records based on the parameter criteria
structures.go
@@ -9,12 +9,12 @@ const API_ROOT = "/api"
 // categorical buckets. the category serves as
 // the keyname. the map is populated through the
 // loadRecords function call.
-var recordMap map[string][]Record
+var recordsArray []Record
 
 // usedRecordMap contains the questions that have
 // already been used. when recordMap is empty,
 // usedRecordMap replaces it.
-var usedRecordMap map[string][]Record
+var usedRecordsArray []Record
 
 // mapLock locks the maps to prevent concurrency issues
 var mapLock *sync.Mutex
@@ -153,8 +153,8 @@ func (cSem *CountingSemaphore) SetCapacity(cap int) {
 }
 
 func init() {
-	recordMap = map[string][]Record{}
-	usedRecordMap = map[string][]Record{}
+	recordsArray = []Record{}
+	usedRecordsArray = []Record{}
 	categoricalData = CategoricalData{}
 	mapLock = &sync.Mutex{}
 }