Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  ctimap.c

  Sprache: C
 

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
 *
 * @File ctimap.c
 *
 * @Brief
 * This file contains the implementation of generic input mapper operations
 * for input mapper management.
 *
 * @Author Liu Chun
 * @Date  May 23 2008
 */


#include "ctimap.h"
#include <linux/slab.h>

int input_mapper_add(struct list_head *mappers, struct imapper *entry,
       int (*map_op)(void *, struct imapper *), void *data)
{
 struct list_head *pos, *pre, *head;
 struct imapper *pre_ent, *pos_ent;

 head = mappers;

 if (list_empty(head)) {
  entry->next = entry->addr;
  map_op(data, entry);
  list_add(&entry->list, head);
  return 0;
 }

 list_for_each(pos, head) {
  pos_ent = list_entry(pos, struct imapper, list);
  if (pos_ent->slot > entry->slot) {
   /* found a position in list */
   break;
  }
 }

 if (pos != head) {
  pre = pos->prev;
  if (pre == head)
   pre = head->prev;

  __list_add(&entry->list, pos->prev, pos);
 } else {
  pre = head->prev;
  pos = head->next;
  list_add_tail(&entry->list, head);
 }

 pre_ent = list_entry(pre, struct imapper, list);
 pos_ent = list_entry(pos, struct imapper, list);

 entry->next = pos_ent->addr;
 map_op(data, entry);
 pre_ent->next = entry->addr;
 map_op(data, pre_ent);

 return 0;
}

int input_mapper_delete(struct list_head *mappers, struct imapper *entry,
       int (*map_op)(void *, struct imapper *), void *data)
{
 struct list_head *next, *pre, *head;
 struct imapper *pre_ent, *next_ent;

 head = mappers;

 if (list_empty(head))
  return 0;

 pre = (entry->list.prev == head) ? head->prev : entry->list.prev;
 next = (entry->list.next == head) ? head->next : entry->list.next;

 if (pre == &entry->list) {
  /* entry is the only one node in mappers list */
  entry->next = entry->addr = entry->user = entry->slot = 0;
  map_op(data, entry);
  list_del(&entry->list);
  return 0;
 }

 pre_ent = list_entry(pre, struct imapper, list);
 next_ent = list_entry(next, struct imapper, list);

 pre_ent->next = next_ent->addr;
 map_op(data, pre_ent);
 list_del(&entry->list);

 return 0;
}

void free_input_mapper_list(struct list_head *head)
{
 struct imapper *entry;
 struct list_head *pos;

 while (!list_empty(head)) {
  pos = head->next;
  list_del(pos);
  entry = list_entry(pos, struct imapper, list);
  kfree(entry);
 }
}


Messung V0.5 in Prozent
C=95 H=91 G=92

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-06-06) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=752002