Guest User

Untitled

a guest
Jan 15th, 2025
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.55 KB | None | 0 0
  1. -- Определяем класс NsDb
  2. NsDb = {}  -- Создаем пустую таблицу для класса
  3. NsDb.__index = NsDb  -- Устанавливаем метатаблицу для объектов класса
  4.  
  5. -- Конструктор для создания нового объекта NsDb
  6. function NsDb:new(input_table, input_table_p, key, tbl_size, is_unique, crypt)
  7.     local new_object = setmetatable({}, self)  -- Создаем новый объект и устанавливаем метатаблицу
  8.     -- Сохраняем данные в объекте
  9.     input_table_p[key] = input_table_p[key] or {}
  10.     input_table[key] = input_table[key] or {}
  11.     new_object.input_table_p = input_table_p[key]  -- Сохраняем входную таблицу в объекте
  12.     new_object.input_table = input_table[key]  -- Сохраняем входную таблицу в объекте
  13.     new_object.is_unique = is_unique  -- Сохраняем уникальность в объекте
  14.     new_object.str_len = tbl_size
  15.     new_object.crypt = crypt
  16.     return new_object  -- Возвращаем созданный объект
  17. end
  18.  
  19. function NsDb:create_bin(message, str)
  20.     local t = GetTime()
  21.     if self.is_unique then
  22.         -- дописать
  23.     else
  24.         local pointer = numCod(string.utf8len(message))
  25.         if string.len(pointer) < 2 then
  26.             pointer = " " .. pointer
  27.         end
  28.         if str == 0 then
  29.             table.insert(self.input_table, message)
  30.             table.insert(self.input_table_p, pointer)
  31.         else
  32.             self.input_table[#self.input_table] = self.input_table[#self.input_table] .. message
  33.             self.input_table_p[#self.input_table_p] = self.input_table_p[#self.input_table_p] .. pointer
  34.         end        
  35.     end
  36. end
  37.  
  38. -- Метод для добавления сообщения в таблицу
  39. function NsDb:add(message)
  40.     if self.crypt then
  41.         -- добавить метод шифровк слов
  42.     end
  43.     if self.str_len > 1 then
  44.         local num = #self.input_table
  45.         if num < 1 then
  46.             --print(message,'1')
  47.             self:create_bin(message, 0)
  48.         elseif num >= 1 and string.utf8len(self.input_table[num]) >= self.str_len then
  49.             --print(message,'2')
  50.             self:create_bin(message, 0)
  51.         elseif num >= 1 and string.utf8len(self.input_table[num]) < self.str_len then
  52.             --print(message,'3')
  53.             self:create_bin(message, 1)
  54.             --table.remove(self.input_table[self.key], num)
  55.         end
  56.     else
  57.         if self.is_unique then
  58.             if num < 1 then
  59.                 self.input_table[message] = 1
  60.             else
  61.                 if not self.input_table[message] then
  62.                     self.input_table[message] = num + 1
  63.                 end
  64.             end
  65.         else
  66.  
  67.         end
  68.     end
  69. end
  70.  
  71. function NsDb:get(message)
  72. -- чтение данных
  73. end
  74.  
  75. function NsDb:crypt(message)
  76.    
  77. end
  78.  
  79. function NsDb:mod_key(change_key, message)
  80.     local num = #self.input_table
  81.     if self.crypt then
  82.         -- добавить метод шифровк слов
  83.     end
  84.     if self.str_len > 1 then
  85.  
  86.     else
  87.         if self.is_unique then
  88.             if not self.input_table[change_key] then
  89.                 self.input_table[change_key] = message
  90.             end
  91.         else
  92.  
  93.         end
  94.     end
  95. end
  96.  
  97. -- Метод для добавления сообщения по указанной позиции
  98. function NsDb:add_pos(message, position)
  99.     -- Вспомогательная функция для сдвига индексов сообщений
  100.     -- дописать изменение индекса сообщения и сдвиг остальных
  101. end
  102.  
  103. -- Метод для удаления сообщения, используя позицию
  104. function NsDb:del_pos(message)
  105.     -- дописать удаление отдельных сообщений с переиндексацией всего
  106. end
  107.  
  108.  
  109. -- Определяем класс create_table
  110. create_table = {}  -- Создаем пустую таблицу для класса
  111. create_table.__index = create_table  -- Устанавливаем метатаблицу для объектов класса
  112.  
  113. -- Конструктор для создания нового объекта create_table
  114. function create_table:new(input_table, key)
  115.     local new_object = setmetatable({}, self)  -- Создаем новый объект и устанавливаем метатаблицу
  116.  
  117.     _G[input_table] = _G[input_table] or {}
  118.     _G[input_table.."_p"] = _G[input_table.."_p"] or {}
  119.     _G[input_table.."_p"][key] = _G[input_table.."_p"][key] or {}
  120.     _G[input_table][key] = _G[input_table][key] or {}
  121.  
  122.     -- Сохраняем данные в объекте
  123.     new_object.input_table = _G[input_table]  -- Сохраняем входную таблицу в объекте
  124.     new_object.input_table_p = _G[input_table.."_p"]
  125.     new_object.key = key  -- Сохраняем ключ в объекте
  126.  
  127.     return new_object  -- Возвращаем созданный объект
  128. end
  129.  
  130. -- Метод для получения таблицы
  131. function create_table:get_table()
  132.     return self.input_table[self.key]  -- Возвращаем таблицу, соответствующую ключу
  133. end
  134. function create_table:get_table_p()
  135.     return self.input_table_p[self.key]  -- Возвращаем таблицу, соответствующую ключу
  136. end
Advertisement
Add Comment
Please, Sign In to add comment