public bool AddCar(String id, String vin, int repairingsCount, int driveWeight, bool searched,
                           DateTime stkEndDate, DateTime ekEndDate)
        {
            Vehicle vehicle = new Vehicle(id, vin, repairingsCount,
                                          driveWeight,
                                          searched, stkEndDate, ekEndDate
                                          );

            int address = CarHeapFile.Add(vehicle);

            bool result = IDCarTree.Add(new AddressedID(vehicle.ID, vehicle.VINMaxLength, address));

            result &= VINCarTree.Add(new AddressedID(vehicle.VIN, vehicle.VINMaxLength, address));
            return(result);
        }
        public bool UpdateCar(String id, String vin, int repairingsCount, int driveWeight, bool searched,
                              DateTime stkEndDate, DateTime ekEndDate)
        {
            AddressedID searchObj = new AddressedID();

            searchObj.ID = id;
            Block <AddressedID> block = IDCarTree.Find(searchObj);

            if (block != null)
            {
                Record <AddressedID>[] records = block.RecordsArray.Records;
                for (int i = 0; i < records.Length; i++)
                {
                    if (records[i].Data.CompareTo(searchObj) == 0)
                    {
                        Block <Vehicle> vehicleBlock = CarHeapFile.FindBlock(records[i].Data.Address);
                        Vehicle         vehicle      = null;
                        int             recordIndex  = 0;
                        for (int j = 0; j < vehicleBlock.RecordsArray.Records.Length; j++)
                        {
                            if (vehicleBlock.RecordsArray.Records[j].Data.ID.Equals(id))
                            {
                                vehicle     = vehicleBlock.RecordsArray.Records[j].Data;
                                recordIndex = j;
                                break;
                            }
                        }
                        vehicle.RepairingsCount = repairingsCount;
                        vehicle.DriveWeight     = driveWeight;
                        vehicle.Searched        = searched;
                        vehicle.STKEndDate      = stkEndDate;
                        vehicle.EKEndDate       = ekEndDate;

                        vehicleBlock.RecordsArray.Records[recordIndex] = new Record <Vehicle>(vehicle);
                        CarHeapFile.WriteBlock(vehicleBlock);
                        return(true);
                    }
                }
            }
            return(false);
        }
        private Vehicle GetCarByIDAsObject(String id)
        {
            AddressedID searchObj = new AddressedID();

            searchObj.ID = id;
            Block <AddressedID> block = IDCarTree.Find(searchObj);

            if (block != null)
            {
                Record <AddressedID>[] records = block.RecordsArray.Records;

                foreach (Record <AddressedID> record in records)
                {
                    if (record.Data.CompareTo(searchObj) == 0)
                    {
                        return(CarHeapFile.FindData(record.Data.Address));
                    }
                }
            }
            return(null);
        }
        public void GenerateData(int addCount)
        {
            Random random = new Random();

            for (int i = 0; i < addCount; i++)
            {
                int randomNumber = random.Next(1, addCount * 100);

                Vehicle vehicle = new Vehicle("ID" + i, "VIN" + (addCount - i), randomNumber % 4,
                                              randomNumber,
                                              false, DateTime.Now.AddDays(randomNumber), DateTime.Now.AddDays(randomNumber)
                                              );

                int address = CarHeapFile.Add(vehicle);

                IDCarTree.Add(new AddressedID(vehicle.ID, vehicle.VINMaxLength, address));
                VINCarTree.Add(new AddressedID(vehicle.VIN, vehicle.VINMaxLength, address));
            }
            File.WriteAllText("C:/Users/User/source/repos/CarDrivingDataManagementTest/idCarTreeLevelOrder.txt",
                              IDCarTree.TraceLevelOrder());
            File.WriteAllText("C:/Users/User/source/repos/CarDrivingDataManagementTest/vinCarTreeLevelOrder.txt",
                              VINCarTree.TraceLevelOrder());
        }
 public String DescribeCarIDDBStructure()
 {
     return(IDCarTree.DescribeFileStructure());
 }
 public void Close()
 {
     IDCarTree.CloseFileInteraction();
     VINCarTree.CloseFileInteraction();
     CarHeapFile.CloseFileInteraction();
 }