0

голосов
0

ответ
7

Просмотры

Coq won't reduce expression involving decision procedure

Я использую Coq версии 8.8.1 и для жизни меня я не могу понять, почему он не будет оценивать значение следующего вычисления. Требовать Импорт Coq.Lists.List. Импорт Coq.Lists.List.ListNotations. Требовать Импорт Coq.Classes.EquivDec. Требовать Импорт Coq.Init.Nat. Требовать Импорт Coq.Arith.EqNat. Требовать Импорт Coq.Lists.ListSet. Требовать Импорт Coq.Bool.Bool. Индуктивный термин: Set: = | вар: физ -> термин | п: физ -> термин -> термин. Схема равенство на срок. Fixpoint uf_find (х: термин) (УФС: набор (набор термин)): опция (набор термин): = ПОИСКПОЗ UFS с | нет [] => None | эм :: UFS' => матч (set_In_dec term_eq_dec х э) с | левый _ => Некоторые эм | конец конец правой _ => uf_find х UFS. Вычислить uf_find (VAR) 3 ноль. (* Почему ISN» T это полностью снижается? *) Вычислить uf_find (вар 3) (против ноль ноль). Аналогичная функция с term_eq_dec вместо этого работает просто отлично: Fixpoint has_succ (х: физ) (л: термин списка): термин варианта: = матч л с | нет [] => None | ч :: л '=> матч term_eq_dec (вар (S х)) ч с | левый _ => Некоторая ч | правый _ => has_succ х»конец конец. Вычислить has_succ 3 [(Var 2); (Вар 1); (Вар 4)].
Akay
1

голосов
1

ответ
59

Просмотры

AttributeError: модуль «гнездо» не имеет атрибута «MSG_DONTWAIT»

Я пытаюсь использовать флаг «MSG_DONTWAIT» в следующем коде Python: RECV_BUFFER_SIZE = 1024 баф = memoryview (ByteArray (RECV_BUFFER_SIZE)) х = client_socket.recv_into (бафф, RECV_BUFFER_SIZE, socket.MSG_DONTWAIT), где я только чтение из сокета , Как ни странно, когда я использую флаг «MSG_WAITALL», код работает отлично, однако он не со следующей ошибкой: х = client_socket.recv_into (бафф, RECV_BUFFER_SIZE, socket.MSG_DONTWAIT) AttributeError: модуль «гнездо» не имеет атрибута «MSG_DONTWAIT», когда Я пытаюсь использовать «MSG_DONTWAIT» из того же класса MsgFlag, в котором «MSG_WAITALL» присутствовал. Я бегу это на платформе окон.
Akay
1

голосов
3

ответ
52

Просмотры

Высвобождение памяти для строки, которая находится в исполняемом

Когда мы объявляем строку как: полукокс * х = «Hello»; То, что я, зная, что это определение строки идет в исполняемом файле и, таким образом, только для чтения. Почему компилятор не бросает какую-либо ошибки или нет сбоя во время выполнения при попытке освободить память для этой строки, как: полукокс * х = «Hello»; Е ( "строка =% s \ п", х); свободный (х); Е ( "строка =% s \ п", х); И я получаю строку распечатана даже после выполнения свободного () заявления. Это как бесплатный интерфейс () работает только на куче?
Akay
5

голосов
3

ответ
298

Просмотры

VARIADIC функция в Ada (C - Ada связывания)?

Я работаю над проектом, который использует C - Ada языка связывания. Функция в C вызовет функцию в Ada стороне. Я хочу сделать VARIADIC функции в Аде, которая может принимать переменное число аргументов, переданных от функции C. Я также хотел послать различные типы аргументов в то же время, как межды, полукокс, перечисления и т.д., в то же время. Можно ли иметь этот тип механизма?
Akay
3

голосов
2

ответ
213

Просмотры

Высвобождение строку (выделенную в Ada) в функции C, используя свободный ()

Я работаю над приложением связывания C-Ад, где я выделение новой строки в Ada стороне, используя Interfaces.C.Strings.New_String (). Interfaces.C.Strings уже есть процедура Free (), чтобы освободить память для строки. Так как мне нужно, чтобы передать эту строку в функцию C помощью Interfaces.C.Strings.Chars_Ptr: Это нормально, если я освободить память для строки в стороне С помощью () функции бесплатно (объявленной в stdlib.h)? Безопасно ли я освободить память из стороны C? Или я должен лучше освободить его с помощью функции Interfaces.C.Strings.Free () из Ада стороны?
Akay
2

голосов
3

ответ
113

Просмотры

Correct way of reading bytes from IEEE754 floating point format

У меня есть требование, когда мне нужно прочитать 4 сырых байт одинарной точности с плавающей запятой IEEE754 представления, как отправить на последовательный порт, как это без каких-либо изменений. Я просто хотел спросить, что это правильный способ извлечения байтов из следующих: 1) создание союза, таких как: ЬурейеЕ союз {флоат е; uint8_t байт [4]; структура {uint32_t мантиссы: 23; uint32_t показатель: 8; uint32_t знак: 1; }; } FloatingPointIEEE754_t; а затем просто чтение байт [] массив после записи в переменных с плавающей точкой е? 2.) Или, извлекая байты с помощью функции, в которой производятся указатель типа uint32_t, чтобы указать на переменный поплавок, а затем байты извлекаются с помощью маскировки uint32_t extractBitsFloat (поплавок numToExtFrom, uint8_t numOfBits, uint8_t bitPosStartLSB) {uint32_t * р = & numToExtFrom ; / * Проверить входы * / если ((numOfBits> 32) || (bitPosStartLSB> 31)) возвращает NULL; / * Построить маска * / uint32_t маску = ((1 bitPosStartLSB);}, где призвании будет сделано, как: valF = -4,235; byte0 = extractBitsFloat (valF, 8, 0); = extractBitsFloat Байт 1 (valF, 8, 8) ; byte2 = extractBitsFloat (valF, 8, 16); байты 3 = extractBitsFloat (valF, 8, 24); Пожалуйста, предложите мне правильный путь, если вы думаете, как вышеупомянутые методы неправильны!
Akay
2

голосов
2

ответ
129

Просмотры

Перебор элементов в структуре в C для извлечения значения и типа данных отдельного элемента

У меня есть требование, где у меня есть большая структура в C, состоящую из примерно более 30 различных элементов различных типов данных: ЬурейиЕ структур {type1 element1; типа2 element2; 3тип element3; TYPE2 element4 [10]; ... TypeN elementN; } My_messg_struct; где это в основном группа элементов сообщения, отправленного по последовательному протоколу. Это сообщение имеет различные элементы различной типы данных, зафиксированные в приведенной выше структуре. Кроме того, у меня есть много других сообщений, а также. Теперь я должен написать обобщенную функцию, которая отвечает за чтение этих структур сообщений и через петлю каждый из элементов чтения значения элемента и типа данных, а затем передает через последовательный порт. Мне нужно прочитать тип данных первым, поскольку порядок передачи различных типов данных отличаются в моем случае. Так, в основном,
Akay
4

голосов
1

ответ
6.2k

Просмотры

Как отключить контекстное меню в WPF?

У меня есть два пункта меню в контексте WPF, я связываю их с командой, как я прячу контекстное меню, когда оба пункта не доступен, я имею в виду, когда обе команда не может быть выполнена?
Akay
1

голосов
1

ответ
127

Просмотры

Лучшие практики для членов структуры отображения в приложении связывания Ada-C

В связывающим применении Ada-C, где должна быть принята и чтение / записи между функциями, определенными в C и Ada структуры (запись), то, что это лучший способ заявить о structers на C и Ada стороны, чтобы обеспечить правильное отображение членов между и языки. Для примера, я объявил структуру в C (без использования битовых полей здесь), но на Ada стороне декларируя те же структуры (запись в Ada) Я также использовал пункт использования представления для отображения его побитового и затем использовал прагму конвенции C. То, что я видел, что Ада не читала структуру правильно, которая, вероятно, я думаю, может быть из-за неправильное побитовое отображение элементов. Просто хотелось бы знать, что это лучший способ, чтобы обеспечить правильное декларирование той же структуры в Ada и C стороны. В случае, если на стороне C, структура объявляется с помощью битовых полей, а затем использовать ту же схему, чтобы битовый decalre ту же самую структуру / запись на Ada стороне, используя условие использования представления? Например, в C, / * Структура Позиции данных * / ЬурейиЕ структуры {плавать латы; плавать LON; } POSITION_TYPE; / * Структура Фикса данных * / ЬурейиЕ структуры {int32_t fix_id; символ fix_type [20]; символ leg_type [7]; символ идент [8]; символ ident_code [11]; символ fix_descriptor [30]; символ way_ident [7]; символ ref_pt [8]; символ ref_pt_code [11]; положение POSITION_TYPE; } FIX_DATA_TYPE; Я объявил ту же структуру в Аде, как: - Позиция записи ------------------------------------- ------------------- Тип Pos_Rec_Type является запись Lat: C.C_float; Lon: C.C_float; конец записи; для Pos_Rec_Type использовать запись Lat в 0 диапазоне 0..31; Lon при 0 диапазоне 32..63; конец записи; прагма конвенции (Конвенция => С, Entity => Pos_Rec_Type); - Исправлена ​​ошибка записи данных --------------------------------------------- ----------- тип Fix_Data_Rec_Type является запись Fix_Id: C.int; Fix_Type: C.char_array (1..20); Leg_Type: C.char_array (1..7); Идент: C.char_array (1..8); Ident_Code: C.char_array (1..11); Fix_Desc: C.char_array (1..30); Way_Ident: C.char_array (1..7); Ref_Pt: C.char_array (1..8); Ref_Pt_Code: C.char_array (1..11); Должность: Pos_Rec_Type; конец записи; для Fix_Data_Rec_Type использовать запись Fix_Id в 0 диапазоне 0..31; Fix_Type при 0 диапазоне 32..191; Leg_Type при 0 диапазоне 192..247; Ident при 0 диапазоне 248..311; Ident_Code при 0 диапазоне 312..399; Fix_Desc при 0 диапазоне 400..639; Way_Ident при 0 диапазоне 640..695; Ref_Pt при 0 диапазоне 696..759; Ref_Pt_Code при 0 диапазоне 760..847; Положение при 0 диапазоне 848..911; конец записи; прагма конвенции (Конвенция => С, Entity => Fix_Data_Rec_Type); Но когда я заселена эта структура на Ada стороне и передала его функцию C, я увидел, что запись позиции не была расшифрована правильно. Когда я отключил положение о представлении Fix_Data_Rec_Type, она работала должным образом. Fix_Desc при 0 диапазоне 400..639; Way_Ident при 0 диапазоне 640..695; Ref_Pt при 0 диапазоне 696..759; Ref_Pt_Code при 0 диапазоне 760..847; Положение при 0 диапазоне 848..911; конец записи; прагма конвенции (Конвенция => С, Entity => Fix_Data_Rec_Type); Но когда я заселена эта структура на Ada стороне и передала его функцию C, я увидел, что запись позиции не была расшифрована правильно. Когда я отключил положение о представлении Fix_Data_Rec_Type, она работала должным образом. Fix_Desc при 0 диапазоне 400..639; Way_Ident при 0 диапазоне 640..695; Ref_Pt при 0 диапазоне 696..759; Ref_Pt_Code при 0 диапазоне 760..847; Положение при 0 диапазоне 848..911; конец записи; прагма конвенции (Конвенция => С, Entity => Fix_Data_Rec_Type); Но когда я заселена эта структура на Ada стороне и передала его функцию C, я увидел, что запись позиции не была расшифрована правильно. Когда я отключил положение о представлении Fix_Data_Rec_Type, она работала должным образом. прагма конвенции (Конвенция => С, Entity => Fix_Data_Rec_Type); Но когда я заселена эта структура на Ada стороне и передала его функцию C, я увидел, что запись позиции не была расшифрована правильно. Когда я отключил положение о представлении Fix_Data_Rec_Type, она работала должным образом. прагма конвенции (Конвенция => С, Entity => Fix_Data_Rec_Type); Но когда я заселена эта структура на Ada стороне и передала его функцию C, я увидел, что запись позиции не была расшифрована правильно. Когда я отключил положение о представлении Fix_Data_Rec_Type, она работала должным образом.
Akay
5

голосов
4

ответ
98

Просмотры

Хранение данных (строка) из границ в динамически распределяемой массиве

Ниже приведена очень простая программа C: символ * р = (символ *) calloc (5, SizeOf (Char)); зЬгср (р, "слон"); Е ( "строка =% s \ п", р); р [6] = 'D'; Е ( "строка =% s \ п", р); который выделяет обугленный массив из 5 элементов с помощью calloc () и использует STRCPY (), чтобы скопировать строку в массив. Ниже приведен результат: String = Elephant String = ElephaDt Очевидно, что я просил за 5 символов элементов и, следовательно, только интересно знать, почему Упр память OS позволила мне хранить больше компоновать элементы, пределы динамически распределяемой пространства в р. Если бы я был выделен только пространство 5 символов, как же зЬгсру () был в состоянии хранить еще большую строку «слон», который больше 5 символов в длину?
Akay
2

голосов
2

ответ
194

Просмотры

extern declaration 2D array in C?

Если я определить простой массив: Int tableint [] [2] = {{1, 2}, {2, 4}, {3, 9}, {4, 16}, {5, 25}}; и код в том же самом файле как: Е ( "Значение =% d \ N", SizeOf (tableint)); Е ( "Значение =% d \ п", SizeOf (tableint [0])); Е ( "Количество строк =% d \ п", SizeOf (tableint) / SizeOf (tableint [0])); Выход, как и ожидалось: Значение = 40 Значение = 8 Количество строк = 5 Но если я перееду один и тот же «tableint» 2D массива в отдельном файле и сохранить упомянутые выше операторы печати в предыдущем главном файле, но только при добавлении экстерном следующим образом: ехЬегп INT tableint [] [2]; Я получаю сообщение об ошибке в следующей строке: Е ( "Значение =% d \ N", SizeOf (tableint)); как: недействительное применение «SizeOf» неполного типа "ИНТ [] [2] Я хотел бы знать, почему это работает, когда 2D массив был там в тот же файл, и не тогда, когда я переместил его в другой файл? И, ошибка становится решена, если я определяю EXTERN как: экстерн Int tableint [5] [2]; Есть ли способ, где мне не нужно упоминать количество строк в ехЬегпе здесь?
Akay
2

голосов
4

ответ
318

Просмотры

Применение явно воспитывающих исключений

Какие приложения и преимущества явно повышение исключения в программе. Например, если мы рассмотрим Ada язык специально здесь предоставляет интерфейс для повышения исключения в программе. Пример: поднять; Но каковы преимущества и область применения, где мы должны были бы вызывать исключения явно? Например, в процедуре, которая принимает один из параметров, как строки: функция Fixed_Str_To_Chr_Ptr (исходная_строка: String) вернуться C.Strings.Chars_Ptr это ... начать ... - Проверьте, правильно ли исходная строка является приемлемой длины, если Source_String'Length .. Do Something .. конец Fixed_Str_To_Chr_Ptr; Есть ли какое-либо преимущество или хорошая практика, если я поднимаю исключение в приведенной выше функции и обрабатывать ее, когда переданная длина строки неизбежно превышает допустимые пределы? Или просто если-иначе логик обработчика должен делать бизнес?
Akay
2

голосов
2

ответ
702

Просмотры

Обе стороны имеют побочные эффекты?

Я побежал статический анализ кода для MISRA 2004 и 2012 MISRA на следующий код C: BOOL_TYPE Strings_Are_Equal (Const символ * s1, Const символ * s2) {результат BOOL_TYPE = True; Const символ * str1 = S1; Const символ * str2 = с2; если (NULL == s1 || NULL == s2) {результат = FALSE; } Еще если (STRLEN (s1) = StrLen (s2)) {результат = False; } Еще {в то время как (* str1 = 0) {если (ToLower (* str1 ++) = ToLower (* str2 ++)) {результат = False; перерыв; }}} Возвращаемый результат; } И получил следующие результаты из отчетов PC-Lint: Может кто-нибудь объяснить, как это код на линии 58 и 66 страдают от побочных эффектов, и как я должен это исправить?
Akay
3

голосов
1

ответ
617

Просмотры

Лучшие способы прохождения строки из C в Ад

У меня есть требование, где нужно, чтобы передать строку из функции C к функции Ada (С-Ada связывания приложения). Функция С: ехЬегп пустота ada_func_print_string (символ *); Pass_String недействительными) {символ ул ([] = "Hello_Ada"; ada_func_print_string (ул); } Ада функции: Спецификация: прагма Экспорт (Конвенция => С, Entity => Ada_Print_String, EXTERNAL_NAME => "ada_func_print_string"); Тело: процедура Ada_Print_String (C_Source: Interfaces.C.char_array) Ada_Str: String: = Interfaces.C.To_Ada (Item => C_Source, Trim_Nul => True); начинают Ada.Text_IO.Put_Line (Ada_Str); конец Ada_Print_String; Приведенный выше код довольно много работает отлично без каких-либо хлопот. У меня есть вопрос, является ли заявление официального C_Source параметра хорошо быть Interfaces.C.char_array или она должна быть лучше Interfaces.C.Strings.chars_ptr? В чем разница между этими двумя в отношении этого приложения? Есть ли летальность, используя среди этих двух типов в здесь?
Akay
1

голосов
3

ответ
387

Просмотры

Сохранение локальных переменных в памяти после конца области видимости функции?

Если, например, у меня небольшая функция: Int сумма (интермедиат а, б INT) {INT результат = а + Ь; возвращать результат; } Здесь, результат является локальной переменной, которая, насколько я понимаю, должны жить только на время выполнения функции. Как звонивший этой функции, способной получить возвращаемое значение функции суммы (), которая не что иное, как значение локальной переменной результата? Просто хотелось бы знать, как значения локальных переменных, объявленных внутри функции возвращаются к функциям абонентов. Я знаю, что это происходит в стеке, но я хотел бы, как точно, как это бывает знать.
Akay
1

голосов
3

ответ
176

Просмотры

sizeof operation on a 2D array

Если я определить 2D массив как: полукокса * tablechar [] [2] = {{ "0", "Иннова"}, { "2", "Брио"}, { "3", "Альто"}, {» 4" , "Болеро"}, { "5", "Свифт"}}; и код в том же файле, как: Е ( "Значение =% d \ N", SizeOf (tablechar)); Е ( "Значение =% d \ п", SizeOf (tablechar [0])); Е ( "Количество строк =% d \ п", SizeOf (tablechar) / SizeOf (tablechar [0])); Выход, как и ожидалось: значение = 40 Значение = 8 Количество строк = 5 Теперь, я передать эту 2D матрицу в функции которого Defination является: недействительным printstuff (символ * Вкладка [] [2]) {Е ( "Значение =% D \ п», SizeOf (вкладка)); Е ( "Значение =% d \ п", SizeOf (вкладка [0])); Е ( "Количество строк =% d \ п", SizeOf (вкладка) / SizeOf (вкладка [0])); } Я получаю следующий результат:
Akay
2

голосов
1

ответ
73

Просмотры

Модульное тестирование с Datatypes входов установлен в MAX + 1 значений

Я делаю модульное тестирование для кода на языке Си, где я имею в виду, что может быть вред, если я не осуществлять входы тестирования с MAX + 1 значений типов данных. Как правило, с оборачивает значение переменной минимален, если значение переполняется его мощность MAX. Например: если символ (диапазон: 0-255) увеличиваются после 255 приведет к 0. Есть ли пример, где это было бы действительно вредно, если тестирование не сделано MAX случаев + 1, где значение катится обратно MIN типа данных в значение?
Akay
2

голосов
1

ответ
67

Просмотры

Понимание поведения рекурсивного кода

Я иду через старый вопрос бумаги теста я запланированном ответить в течение нескольких недель, и следующая проблема заставила меня в тупике: Конечная последовательность бит представлена ​​в виде списка со значениями из множества {0,1} - например, [0,1,0], [1,0,1,1]. [] Обозначает пустой список, и [Ь] список, состоящий из одного бита б. Для непустого списка л, головка (л) возвращает первый элемент л, и хвост (л) возвращает список, полученный путем удаления первого элемента из л. а: л обозначает новый список, образованный путем добавления во главе списка л. Например: • головка ([0,1,0]) = 0, хвост ([0,1,0]) = [1,0], • головка ([1]) = 1, хвост ([1]) = [], и • 1: [0,1,0] = [1,0,1,0]. Рассмотрим следующие функции: • f1 принимает в качестве входных данных список и возвращает другой список. f1 (ы): если (ы == []), а затем возвращать ([1]), если другое (головка (ы) == 0), а затем возвращать (1: хвост (s)) иначе если (голова (s) == 1), а затем вернуться (0: f1 (хвост (s))) ENDIF • f2 принимает в качестве входных бит и список и возвращает немного. 2 (B, S): если (ы == []), а затем возвращать (б) еще, если (головка (ы) == 0), а затем возвращать (f2 (не (б), хвост (ы))) иначе, если ( голова (s) == 1), а затем вернуться (не (б)) ENDIF • g1 принимает в качестве входных данных неотрицательного числа и возвращает список. g1 (п): если (п == 0), а затем вернуться ([0]) еще возвратный f1 (g1 (п-1)) ENDIF • g2 принимает в качестве входных данных неотрицательное число и возвращает немного. g2 (п): если (п == 0), а затем вернуться (0) еще возвратный f2 (g2 (п-1), g1 (п)) ENDIF Что такое значение g2 (7) и g2 (8)? Что такое значение g2 (256) и g2 (257)? До сих пор я только был в состоянии понять поведение f1 (заменяет голова на 1, если 0 и возвращается. В противном случае, замените головку на 0 и называть себя на остальной части списка.), а g1 (п), который является таким же, как f1, применяемых к [0] п раз (f1 (f1 (f1 ... ([0]))) - N раз). Есть ли какой-структурированный метод с помощью которого можно решить эти и подобные проблемы (особенно в условиях цейтнота.) EDIT: f2 инвертирует битое б, как много раз, как число 0 'перед первым 1 в списке с. g2 () все еще остается загадкой.
Akay
4

голосов
1

ответ
158

Просмотры

Лучшее место, чтобы положить константы

В системе с несколькими исходным файлом C, который является лучшим местом, чтобы поместить постоянные значения, сами или в его файл заголовок исходного файл? При условии, что константа будет использоваться только в этом исходном файле. Это хороший способ сохранить статическую сопзЬ в заголовочных файлах?
Akay
2

голосов
2

ответ
66

Просмотры

Один уникальный идентификатор для различных таблиц

В MySQL У меня есть две таблицы. Две таблицы и имеет автоматическое приращение. Я хочу, чтобы таблицы разделяют тот же уникальный идентификатор таблицы. Например, когда я вставить данные в таблицу 1, это даст идентификатор 5 в ряд, а затем конец таблица 2 обыкновения иметь возможность использовать идентификатор 5. Он автоматически дает идентификатор 6 к строке.
Emre Akay
4

голосов
3

ответ
945

Просмотры

ClassNotFoundException DynamiteModuleInitializer Android

Since i updated my android studio and sdk. these errors started occurring at once and preventing me from writing to the a child in the database, i have no idea what the problem is. but it seems that when i'm trying to write to the database from the "EditCarPostActivity" activity it is occurring, From other activities i can write and update and retrieve information perfectly. Please help with this problem. I will post some activities below Error 1 04-29 18:38:54.685 11007-11034/com.example.ahmad.carrental E/ChimeraFileApk: Failed to validate DexClassLoader. java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.chimera.DynamiteModuleInitializer" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib64, /vendor/lib64, /system/vendor/lib64, /product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) Error 2 04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental E/ChimeraModuleLdr: Failed to load code for module FileApk(/data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk) ddp: Failed to load code for /data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk Error 3 04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental W/ChimeraDebugLogger: Singleton logger instance not set. 04-29 18:38:54.686 11007-11034/com.example.ahmad.carrental E/DynamiteLoaderV2: Failed to create module context. ddp: Failed to load code for /data/user_de/0/com.google.android.gms/app_chimera/m/0000002d/DynamiteModulesC_GmsCore_prodmnc_alldpi_release.apk EditCarPostActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_car_post); initialization(); setupFirebaseAuth(); setUpLocationSpinner(); userID = mAuth.getCurrentUser().getUid(); //Assigning Car object with its data from database. Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { singleValueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { car = mFirebaseUtilities.getCarByUserID(userID,dataSnapshot); editCarPostPresenter.populateViews(car); } @Override public void onCancelled(DatabaseError databaseError) { Log.e(TAG, "CANCELLED."); } }; mDatabaseReference.addValueEventListener(singleValueEventListener); } }).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(); //Save all the changes when done editing to database. checkButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { editCarPostPresenter.onSaveChanges(car); } }); //When user click image button, start image selection from gallery tvImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent,GALLERY_INT); } }); } /** * Will listen for user image selection and will store the selected image in a uri object, then call getUriImage to update it * When the user finishes editing and clicks the check button along with any change in car information to the database. * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == GALLERY_INT && resultCode == RESULT_OK){ mProgressDialog.setMessage("Uploading ....."); mProgressDialog.show(); Uri uri = data.getData(); storagePathReference = mStorageReference.child("Photos").child(userID).child(uri.getLastPathSegment()); //Update all the information with the image given as Uri storagePathReference.putFile(uri).addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Toast.makeText(mContext,"Image Upload success!",Toast.LENGTH_SHORT).show(); mProgressDialog.dismiss(); downloadImageUri = taskSnapshot.getDownloadUrl(); Picasso.get().load(downloadImageUri).fit().centerCrop().into(ivCarPicture); } }); } } public void deleteUnusedImages(Car car){ car = this.car; String imageID = car.getPicture(); for(int i = 0;i
Akay
2

голосов
3

ответ
94

Просмотры

Определение порядка байтов машинной архитектуры C правильный путь

Я просто написал следующую функцию для определения порядка байтов архитектуры машины (написание для архитектуры микроконтроллеров на базе ARM Cortex-M7, хотя, но хотел функциональность, чтобы сделать код переносимым): uint8_t is_little_endian () {испытание статической сопзЬ накидной {uint32_t Num; uint8_t байт [SizeOf (uint32_t)]; } Р = {.num = 1U}; возврата (p.bytes [0] == 1U); } Я просто хотел бы знать, будет ли какие-либо ложные результаты, если я использую неподписанных Int и голец здесь вместо uint32_t и uint8_t в коде выше? Если да, то почему?
Akay
1

голосов
1

ответ
66

Просмотры

Какой тип указателя массива?

Когда я объявить массив в C: обугливается в [] = «нечто»; Я понимаю, что это неявно константный указатель на символ, т.е. относится к типу: (символ * сопзИте) Но тогда почему следующий результат заявления в компиляторе предупреждения о несовместимых типах указателей? символ * сопзЬ * J = & а; Единственный способ, которым я уже успел избавиться от это явным образом заливки правой стороны, чтобы (символ * константный *). Я предположил, что и оператор возвращает константный указатель и попытался сЬаг * сопз * константный J = & а; безуспешно. Что здесь происходит?
Akay
2

голосов
1

ответ
488

Просмотры

Реализация SslErrorHandler проследовать функции ()

Я пытаюсь узнать, что происходит на уровне кода в Android, когда SslErrorHandler.proceed () (из класса https://developer.android.com/reference/android/webkit/SslErrorHandler.html) вызывается функция onReceivedSslError WebviewClient в. Документация в приведенной выше ссылке далее упоминается: Экземпляры этого класса создаются WebView и передаются onReceivedSslError (WebView, SslErrorHandler, SslError) Однако, на поиск кода в Webview.java, я не вижу какой-либо объект SslErrorHandler создается , Любые указатели для меня, чтобы понять это дальше?
Akay
3

голосов
1

ответ
94

Просмотры

Coq: Перезапись с «FORALL» в гипотезе или цели

Я доказал «правильность» обратной функции полиморфных списков в Coq. Следующее доказательство работает просто отлично, но у меня есть несколько вопросов о том, как работает переписывает тактик. Вот код: Требовать Экспорт Coq.Lists.List. Импорт ListNotations. Fixpoint оборотов {Т: Тип} (л: список Т): список Т: = л матч с | ноль => ноль | ч :: т => т оборотов ++ [ч] конец. (* Докажите rev_acc равную выше наивную реализации *.) Fixpoint rev_acc {Т: Тип} (л соотв: список Т): список Т: = л матча с | ноль => акк | ч :: гр => rev_acc т (ч :: акк) конец. Теорема app_assoc: FORALL (T: Тип) (l1 l2 l3: список T), (l1 l2 ++) ++ l3 = l1 ++ (l2 ++ l3). Доказательство. Признался. Теорема rev_acc_correct: FORALL (Т: Тип) (лк: список Т), об л ++, к = rev_acc л к. Доказательство. интро Т л. индукция л, как [| гектолитров 'IHL']. - рефлексия. - Симпл. интро к. (* Почему "интро к" требуется для "переписывания -> app_assoc" *) (* Но "переписывания -> IHL '" работает независимо от "интро к". *) (* Обобщать (ред л'), [ч] , к *) переписывают. -> app_assoc. Симпл. переписать -> «IHL. рефлексивность. QED. В индуктивном шаге доказательства для rev_acc_correct если я Проигрывать к, то перезапись с app_assoc жалуется, что не может найти соответствующий подтерм. не найдено подтерме "(? M1058 ++? M1059) ++? M1060" в текущей цели. Здесь, я полагаю, что? перед экземплификантом означает, что условия ограничены, в этом случае будет списочным типа T для некоторого типа T; и так как оборот л»и [ч] в цели являются экземплярами List T, можно было бы ожидать матча в ворота. С другой стороны, перезаписи индукции (переписывания -> IHL ') вместо app_assoc проходит без необходимости вводного K раньше. Я считаю такое поведение переписать немного запутанным и руководство Coq не дает каких-либо деталей. Я не хочу, чтобы прочитать в реализации, но мне нужно хорошее оперативное понимание того, что делает переписывание тактик, особенно в отношении того, как работает срок согласование. Любые ответы / ссылки в этом направлении получили высокую оценку. особенно в отношении того, как работает срок согласования. Любые ответы / ссылки в этом направлении получили высокую оценку. особенно в отношении того, как работает срок согласования. Любые ответы / ссылки в этом направлении получили высокую оценку.
Akay
1

голосов
1

ответ
61

Просмотры

Extracting bit positions in a union of 16 bits in C

I want to declare a union in C which mainly contains a 16-bit word, and I should be able to read/write the LSP 7 bits and 8th bit separately for each byte in the 16-bit word, so I declared something like: typedef union { uint8_t full_8_char_byte[2]; uint8_t ascii_7_bits_word_0 : 7; /* another way of representing LSP 7 ASCII bits */ uint8_t parity_bit_word_0 : 1; /* another way of representing MSP parity bit */ uint8_t ascii_7_bits_word_1 : 7; /* another way of representing LSP 7 ASCII bits */ uint8_t parity_bit_word_1 : 1; /* another way of representing MSP parity bit */ } ip_char_t; Now, when I write 7-bit values to these individual bytes in the 16-bit word: x.full_8_char_byte[0] = 0x7E; x.full_8_char_byte[1] = 0x7E; The following simple program: int main() { ip_char_t x; x.full_8_char_byte[0] = 0x7E; x.full_8_char_byte[1] = 0x7E; printf("%c %c\n", x.full_8_char_byte[1], x.full_8_char_byte[0]); printf("%u %u\n", x.full_8_char_byte[1], x.full_8_char_byte[0]); printf("%X %X\n\n", x.full_8_char_byte[1], x.full_8_char_byte[0]); printf("%c %c\n", x.ascii_7_bits_word_1, x.ascii_7_bits_word_0); printf("%u %u\n", x.ascii_7_bits_word_1, x.ascii_7_bits_word_0); printf("%X %X\n\n", x.ascii_7_bits_word_1, x.ascii_7_bits_word_0); printf("%d %d\n", x.parity_bit_word_1, x.parity_bit_word_0); return 0; } gives the correct output as follows: ~ ~ 126 126 7E 7E ~ ~ 126 126 7E 7E 0 0 but when I initialized x.full_8_char_byte[1] to a 8-bit value: x.full_8_char_byte[0] = 0x7E; x.full_8_char_byte[1] = 0xFF; the output I get is: � ~ 255 126 FF 7E ~ ~ 126 126 7E 7E 0 0 Similar thing happens when I initialize x.full_8_char_byte[0] to 0xFF, my question is why the value in x.ascii_7_bits_word_1 and x.parity_bit_word_1 did not reflected per change in x.full_8_char_byte[1]?
Akay
5

голосов
1

ответ
461

Просмотры

Альтернативы динамического распределения в безопасности критически важных проектов (C)

Безопасность критически важные проекты не рекомендуем динамическое распределение или освобождая выделенную память. Только на этапе разработки / инициализации выполнения программы, разрешено. Я знаю, что большинство из вас будет спорить реализовать SW с точкой, где он должен делать все статические распределения или только сделать какое-то оправдание в коде, что динамические распределения не повредят общую программу, и т.д., но до сих пор, Есть ли альтернатива этой проблемы? Есть ли способ или любой пример рода выделить некоторые (кучи) памяти во время инициализации программы / разработки и выделять / освобождать память от туда? Или какие-либо решения / альтернативы этой проблемы, если мы действительно хотим динамического распределения в (безопасность критически) проекта?
Akay
0

голосов
3

ответ
800

Просмотры

Значение DataSnapShot объекта возвращение нуля на GetValue (Boolean.class)

Я делаю приложение для отслеживания в реальном времени от урока онлайн, Здесь я устанавливаю систему присутствия с помощью firebase. Но это сбой с: /java.lang.NullPointerException: Попытка вызвать виртуальный метод «булево java.lang.Boolean.booleanValue ()» на нулевой ссылки на объект, я не понимаю, что плохого парня, который закодирован это он прекрасно работает , Исключение происходит в этой строке: если (dataSnapshot.getValue (Boolean.class)) {Когда я войти этого на экране объект datasnapshot имеет ключ, но не значение HELP! ListOnline класса // firebase DatabaseReference onlineRef, currentUserRef, counterRef; FirebaseRecyclerAdapter адаптер; // Просмотр RecyclerView listOnline; RecyclerView.LayoutManager LayoutManager; @Override защищены недействительный OnCreate (Пачка savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_list_online); // установка recyclerview listOnline = (RecyclerView) findViewById (R.id.listOnlineRecyclerview); listOnline.setHasFixedSize (истина); LayoutManager = новый LinearLayoutManager (это); listOnline.setLayoutManager (LayoutManager); // установить панель инструментов и меню / присоединиться, выход из системы Панели инструментов = (панель инструментов) findViewById (R.id.toolbarID); toolbar.setTitle ( "System Presence"); setSupportActionBar (панель инструментов); // firebase onlineRef = FirebaseDatabase.getInstance () getReference () ребенок ( "Информация / подключен")..; counterRef = FirebaseDatabase.getInstance () getReference ( "lastOnline"). // создать новое имя ребенка lastOnline currentUserRef = FirebaseDatabase.getInstance () getReference () ребенок (FirebaseAuth.getInstance () getCurrentUser () getUid ()..).. setupSystem (); // после установки мы загружаем всех пользователей и отображение в recyclerview // это онлайн список updateList (); } Частная пустота updateList () {адаптер = новый FirebaseRecyclerAdapter (User.class, R.layout.user_layout, ListOnlineViewHolder.class, counterRef) {@Override защищен недействительным populateViewHolder (ListOnlineViewHolder viewHolder, модель пользователя, внутр положение) {viewHolder.emailTextView.setText (model.getEmail ()); }}; adapter.notifyDataSetChanged (); listOnline.setAdapter (адаптер); } Частная пустота setupSystem () {onlineRef.addValueEventListener (новый ValueEventListener () {@Override общественного недействительный OnDataChange (DataSnapshot dataSnapshot) {если (dataSnapshot.getValue (Boolean.class)) {currentUserRef.onDisconnect (). removeValue (); // Устанавливаем онлайн пользователей в список counterRef.child (FirebaseAuth.getInstance () getCurrentUser () getUid ().). .SetValue (FirebaseAuth.getInstance () getCurrentUser () getEmail (), "Интернет"..); adapter.notifyDataSetChanged (); }} @Override общественных недействительный onCancelled (DatabaseError DatabaseError) {}}); counterRef.addValueEventListener (новый ValueEventListener () {@Override общественного недействительными OnDataChange (DataSnapshot dataSnapshot) {для (DataSnapshot postSnapshot: dataSnapshot.getChildren ()) {пользователь User = postSnapshot.getValue (User.class); Log.d ( "LOG" "" + user.getEmail () + "есть" + user.getStatus ()); }} @Override общественных недействительный onCancelled (DatabaseError DatabaseError) {}}); } @Override общественного логический onCreateOptionsMenu (меню Меню) {MenuInflater menuInflater = getMenuInflater (); menuInflater.inflate (R.menu.main_menu, меню); возвращает истину; } @Override общественного логический onOptionsItemSelected (MenuItem элемент) {переключатель (item.getItemId ()) {случай R.id.action_join: counterRef.child (.. FirebaseAuth.getInstance () getCurrentUser () getUid ()) .setValue (FirebaseAuth. . деЫпзЬапс () getCurrentUser () getEmail (), "Интернет"). перерыв; Случай R.id.action_logout: currentUserRef.removeValue (); } Вернуть super.onOptionsItemSelected (пункт); }} Класс пользователя открытый класс пользователя {частной Струнный электронной почты, статус; Public User (String электронной почты, строка состояния) {this.email = электронная почта; this.status = статус; } Общественности пользователя () {} Строка общественного getEmail () {возвращение по электронной почте; } Общественного недействительными setEmail (String электронной почты) {this.email = электронная почта; } Строка GetStatus общественности () {возвращение статуса; } Общественный недействительный (статус String) setStatus {this.status = статус; }} MainActivity общественного класса MainActivity расширяет AppCompatActivity {Button signInButton; частный конечный статический ИНТ LOGIN_PERMISSION = 1000; @Override защищены недействительный OnCreate (Пачка savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); signInButton = (кнопка) findViewById (R.id.signInButton); signInButton.setOnClickListener (новый вид. OnClickListener () {@Override общественный недействительный OnClick (View Вид) {startActivityForResult (AuthUI.getInstance () createSignInIntentBuilder () setAllowNewEmailAccounts (истина) .build (), LOGIN_PERMISSION..); }}); } @Override защищен недействительным onActivityResult (Int, Int requestCode ResultCode, Намерение данных) {если (requestCode == LOGIN_PERMISSION) {startNewActivity (ResultCode, данные); }} Частный недействительным startNewActivity (INT ResultCode, Intent данные) {если (ResultCode == RESULT_OK) {Намерение умысел = новый Intent (MainActivity.this, ListOnline.class); startActivity (намерение); Конец(); } Еще {Toast.makeText (это, "не удалось Войти !!", Toast.LENGTH_SHORT) .show (); }}} }}); } @Override защищен недействительным onActivityResult (Int, Int requestCode ResultCode, Намерение данных) {если (requestCode == LOGIN_PERMISSION) {startNewActivity (ResultCode, данные); }} Частный недействительным startNewActivity (INT ResultCode, Intent данные) {если (ResultCode == RESULT_OK) {Намерение умысел = новый Intent (MainActivity.this, ListOnline.class); startActivity (намерение); Конец(); } Еще {Toast.makeText (это, "не удалось Войти !!", Toast.LENGTH_SHORT) .show (); }}} }}); } @Override защищен недействительным onActivityResult (Int, Int requestCode ResultCode, Намерение данных) {если (requestCode == LOGIN_PERMISSION) {startNewActivity (ResultCode, данные); }} Частный недействительным startNewActivity (INT ResultCode, Intent данные) {если (ResultCode == RESULT_OK) {Намерение умысел = новый Intent (MainActivity.this, ListOnline.class); startActivity (намерение); Конец(); } Еще {Toast.makeText (это, "не удалось Войти !!", Toast.LENGTH_SHORT) .show (); }}} Намерение данные) {если (ResultCode == RESULT_OK) {Намерение Намерение = новое Намерение (MainActivity.this, ListOnline.class); startActivity (намерение); Конец(); } Еще {Toast.makeText (это, "не удалось Войти !!", Toast.LENGTH_SHORT) .show (); }}} Намерение данные) {если (ResultCode == RESULT_OK) {Намерение Намерение = новое Намерение (MainActivity.this, ListOnline.class); startActivity (намерение); Конец(); } Еще {Toast.makeText (это, "не удалось Войти !!", Toast.LENGTH_SHORT) .show (); }}}
Akay