Esempio n. 1
0
postman::ClusterUpdate postman::deserialize_cluster_update(std::string s) {
    ClusterUpdate cu;
    auto lines = util::split(s, '\n');

    cu.initiator = storage::Host(storage::deserialize_host(lines[0]));

    enum Mode {
        NEW_USERS,
        NEW_POSTS,
        NEW_FOLLOWS,
        NEW_HOSTS,
        DEL_HOSTS,
        ERROR
    };

#define DECODER(a) do { \
    if (modeline == #a) return a; \
} while(0)
    auto decode_mode = [] (std::string modeline) {
        DECODER(NEW_USERS);
        DECODER(NEW_POSTS);
        DECODER(NEW_FOLLOWS);
        DECODER(NEW_HOSTS);
        DECODER(DEL_HOSTS);
        return ERROR;
    };
#undef DECODER

    Mode curr_mode = ERROR;
    for (size_t curr_line = 1; curr_line < lines.size()-1; curr_line++) {
        if (lines[curr_line] == "DONE") break;
        if (decode_mode(lines[curr_line]) != ERROR) {
            DEBUG("Switching mode to %s\n", lines[curr_line].c_str());
            curr_mode = decode_mode(lines[curr_line]);
        } else {
            switch (curr_mode) {
            case NEW_USERS:
                cu.new_users.push_back(storage::deserialize_user(lines[curr_line]));
                break;
            case NEW_POSTS:
                cu.new_posts.push_back(storage::deserialize_post(lines[curr_line]));
                break;
            case NEW_FOLLOWS:
                cu.new_follows.push_back(storage::deserialize_follow(lines[curr_line]));
                break;
            case NEW_HOSTS:
                cu.new_hosts.push_back(storage::deserialize_host(lines[curr_line]));
                break;
            case DEL_HOSTS:
                cu.del_hosts.push_back(storage::deserialize_host(lines[curr_line]));
                break;
            case ERROR:
                ERR("This should never be hit!!!\n");
                break;
            }
        }
    }

    return cu;
}
Esempio n. 2
0
Mgmt_Type decode_mgmt_type(std::string s_type) {
    DECODER(ADD_NODE);
    DECODER(CONNECT);
    DECODER(GET_HOSTS);
    DECODER(CLUSTER_UPDATE);
    DECODER(SAVE);
    DECODER(LOAD);
    return MGMT_INVALID;
}
Esempio n. 3
0
void execute_program(char** instructions, int n_instructions, var** vars) {
	int i;
	char instruction[16];
	char argument[128];
	for (i = 2; i < n_instructions; i++) {
		sscanf(instructions[i], "%s %[^\n]\n", instruction, argument);
		if (strcmp(instruction, "AND") == 0) {
			vars[(int) argument[4]] -> value = AND(vars[(int)argument[0]], vars[(int)argument[2]]);
		} else if (strcmp(instruction, "OR") == 0) {
			vars[(int) argument[4]] -> value = OR(vars[(int) argument[0]], vars[(int) argument[2]]);
		} else if (strcmp(instruction, "MULTIPLEXER") == 0) {
			int num_inputs;
			sscanf(argument, "%d ", &num_inputs);
			int num_selectors = (int) ceil(log2(num_inputs));
			var* inputs[num_inputs];
			var* selectors[num_selectors];
			int g;
			for (g = 0; g < num_inputs; g++) {
				inputs[g] = vars[(int) argument[g*2+2]];
			}
			for (g = 0; g < num_selectors; g++) {
				selectors[g] = vars[(int) argument[(2 * num_inputs + 2) + g * 2]];
			}
			var* output = vars[(int) argument[num_inputs*2 + num_selectors*2 + 2]];
			MULTIPLEXER(num_inputs, inputs, selectors, output);
		} else if (strcmp(instruction, "DECODER") == 0) {
			int num_inputs;
			sscanf(argument, "%d ", &num_inputs);
			int num_outputs = pow(num_inputs, 2);
			var* inputs[num_inputs];
			var* outputs[num_outputs];
			int g;
			for (g = 0; g < num_inputs; g++) {
				inputs[g] = vars[(int) argument[g*2 + 2]];
			}

			for (g = 0; g < num_outputs; g++) {
				outputs[g] = vars[(int) argument[(2 * num_inputs + 2) + g * 2]];
			}
			DECODER(num_inputs, inputs, outputs);
		}
	}

}
Esempio n. 4
0
static void
decoder_set_property(GObject      *obj,
                     guint         property_id,
                     const GValue *value,
                     GParamSpec   *pspec)
{
        Decoder *self = DECODER(obj);
        DecoderPrivate *priv = DECODER_GET_PRIVATE(self);

        switch (property_id) {
        case PROP_CHAIN:
                if (priv->chain != NULL)
                        g_object_unref(priv->chain);
                priv->chain = g_value_get_pointer(value);
                break;

        case PROP_ENC_SIZE:
                priv->enc_size = g_value_get_ulong (value);
                break;

        case PROP_RAW_SIZE:
                priv->raw_size = g_value_get_ulong (value);
                break;

        case PROP_ENC_DATA:
                if (priv->enc_data != NULL)
                        g_free(priv->enc_data);
                priv->enc_data = g_value_get_pointer(value);
                break;

        case PROP_RAW_DATA:
                if (priv->raw_data != NULL)
                        g_free(priv->raw_data);
                priv->raw_data = g_value_get_pointer(value);
                break;

        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
                break;
  }
}
Esempio n. 5
0
static void
decoder_dispose(GObject *obj)
{
        Decoder *self = DECODER(obj);
        DecoderPrivate *priv = DECODER_GET_PRIVATE (self);

        if (priv->disposed)
                return;
        priv->disposed = TRUE;

        /* unref other objects */

        if (priv->chain)
                g_object_unref(priv->chain);
        g_free(priv->enc_data);

        /* dont free priv->raw_data, it is never allocated by us */

        if (G_OBJECT_CLASS (decoder_parent_class)->dispose)
                G_OBJECT_CLASS (decoder_parent_class)->dispose (obj);
}
Esempio n. 6
0
namespace rawspeed {

TiffParser::TiffParser(const Buffer* file) : RawParser(file) {}

std::unique_ptr<RawDecoder> TiffParser::getDecoder(const CameraMetaData* meta) {
  return TiffParser::makeDecoder(TiffParser::parse(*mInput), *mInput);
}

TiffRootIFDOwner TiffParser::parse(const Buffer& data) {
  ByteStream bs(data, 0);
  bs.setByteOrder(getTiffByteOrder(bs, 0, "TIFF header"));
  bs.skipBytes(2);

  ushort16 magic = bs.getU16();
  if (magic != 42 && magic != 0x4f52 && magic != 0x5352 && magic != 0x55) // ORF has 0x4f52/0x5352, RW2 0x55 - Brillant!
    ThrowTPE("Not a TIFF file (magic 42)");

  TiffRootIFDOwner root = std::make_unique<TiffRootIFD>(
      nullptr, nullptr, bs,
      UINT32_MAX); // tell TiffIFD constructur not to parse bs as IFD

  NORangesSet<Buffer> ifds;

  for (uint32 IFDOffset = bs.getU32(); IFDOffset;
       IFDOffset = root->getSubIFDs().back()->getNextIFD()) {
    root->add(std::make_unique<TiffIFD>(root.get(), &ifds, bs, IFDOffset));
  }

  return root;
}

std::unique_ptr<RawDecoder> TiffParser::makeDecoder(TiffRootIFDOwner root,
                                                    const Buffer& data) {
  const Buffer* mInput = &data;
  if (!root)
    ThrowTPE("TiffIFD is null.");

  for (const auto& decoder : Map) {
    checker_t dChecker = nullptr;
    constructor_t dConstructor = nullptr;

    std::tie(dChecker, dConstructor) = decoder;

    assert(dChecker);
    assert(dConstructor);

    if (!dChecker(root.get(), mInput))
      continue;

    return dConstructor(move(root), mInput);
  }

  ThrowTPE("No decoder found. Sorry.");
}

template <class Decoder>
std::unique_ptr<RawDecoder> TiffParser::constructor(TiffRootIFDOwner&& root,
                                                    const Buffer* data) {
  return std::make_unique<Decoder>(std::move(root), data);
}

#define DECODER(name)                                                          \
  { std::make_pair(&name::isAppropriateDecoder, &constructor<name>) }

const std::array<std::pair<TiffParser::checker_t, TiffParser::constructor_t>,
                 17>
    TiffParser::Map = {{
        DECODER(DngDecoder),
        DECODER(MosDecoder),
        DECODER(IiqDecoder),
        DECODER(Cr2Decoder),
        DECODER(RafDecoder),
        DECODER(NefDecoder),
        DECODER(OrfDecoder),
        DECODER(ArwDecoder),
        DECODER(PefDecoder),
        DECODER(Rw2Decoder),
        DECODER(SrwDecoder),
        DECODER(MefDecoder),
        DECODER(DcrDecoder),
        DECODER(DcsDecoder),
        DECODER(KdcDecoder),
        DECODER(ErfDecoder),
        DECODER(ThreefrDecoder),

    }};

} // namespace rawspeed
Esempio n. 7
0
int main (int argc, char** argv){
 
  FILE* circ;
  FILE* inp;
  char c;
  char str[20];
  char* outs;
  char * outsig;
  int num =0;
  int numout = 0;
  int i;
  char* inputs;
  char* inputx;
  char* inputz;
  inp = fopen(argv[2],"r");
  int* outx;  
  int a;
  int b;
  int* greys;
  while(1){
    circ = fopen(argv[1],"r");
    createdatamap();
    while(1){
      
     if(fscanf(circ,"%s",str)==EOF){
       
	break;
      } 
      
      if(strcmp("INPUTVAR",str)==0){
	fscanf(circ,"%d",&num);
	inputs = (char*) malloc(num * sizeof(char));
	for(i=0;i<num;i++){
	  fscanf(circ," %c",&inputs[i]);
     	}
	for(i=0;i<num;i++){
           if( fscanf(inp,"%d",&datamap[getindex(inputs[i])])==EOF){
	    return 0;
	  } 
	}
	free(inputs);      
      } 
      else if(strcmp("OUTPUTVAR",str) ==0){
	fscanf(circ,"%d",&numout);
	outs = (char*) malloc(numout * sizeof(char));
	for(i=0;i<numout;i++){
          fscanf(circ," %c",&outs[i]);
	  
        }

      }

      else if(strcmp("AND",str)==0){

	fscanf(circ," %c",&c);
	if(isalpha(c)){
	  a = datamap[getindex(c)];
	}
	else{
	  a = (int)c - '0';
	}
	fscanf(circ," %c",&c);
	if(isalpha(c)){
          b = datamap[getindex(c)];
        }
        else{
          b = (int)c - '0';
        }
	fscanf(circ," %c",&c);
	AND(a,b,&datamap[getindex(c)]);
	
      }  

      else if(strcmp("OR",str)== 0){

	fscanf(circ," %c",&c);
        if(isalpha(c)){
          a = datamap[getindex(c)];
        }
        else{
          a = (int)c - '0';
        }
        fscanf(circ," %c",&c);
        if(isalpha(c)){
          b = datamap[getindex(c)];
        }
        else{
          b = (int)c - '0';
        }
        fscanf(circ," %c",&c);
        OR(a,b,&datamap[getindex(c)]);	
      }
      else if(strcmp("NOT",str)== 0){
	
	fscanf(circ," %c",&c);
        if(isalpha(c)){
          a = datamap[getindex(c)];
        }
        else{
          a = (int)c - '0';
        }
	fscanf(circ," %c",&c);
	NOT(a,&datamap[getindex(c)]);
      }
      else if(strcmp("DECODER",str)==0){
	
	fscanf(circ,"%d",&num);
        inputz = (char*) malloc(num * sizeof(char));
	greys = (int*) malloc(num * sizeof(int));

	for(i=0;i<num;i++){
          fscanf(circ," %c",&inputz[i]);
        }
	for(i = 0;i<num;i++){
	  if(isalpha(inputz[i])){
	    greys[i]=datamap[getindex(inputz[i])];
	  }
	  else{
	    greys[i] = (int)inputz[i]- '0';
	  }
	}
	a = pow(2,num);
	outsig = (char*)malloc(a*sizeof(char));
	for( i=0;i<a;i++){
	  fscanf(circ," %c",&outsig[i]);
	}
	DECODER(greys,num,outsig);
	free(outsig);
	free(greys);
	free(inputz);
      }
      else if(strcmp("MULTIPLEXER",str)==0){
	fscanf(circ,"%d",&num);
	outx = (int*)malloc(num*sizeof(int));
	for(i=0;i<num;i++){

	  fscanf(circ," %c",&c);
	  if(isalpha(c)){
	      outx[i] = datamap[getindex(c)];
	    }
	    else{
	      outx[i] = (int)c - '0';
	    }

	}
	num = (int)(log(num)/log(2));
	inputx = (char*)calloc(num,sizeof(char));
	for(i=0;i<num;i++){
	  fscanf(circ," %c",&inputx[i]);
	}
	greys = (int*) malloc(num * sizeof(int));
	for(i = 0;i<num;i++){
	  if(isalpha(inputx[i])){
	      greys[i]=datamap[getindex(inputx[i])];
	    }
	    else{
	      greys[i] = (int)inputx[i] - '0';
	    }
        }
	  fscanf(circ," %c",&c);
	  MUX(greys,num,outx,&datamap[getindex(c)]);
	  free(greys);
	  free(outx);
	  free(inputx);
      }
    }
    printout(numout,outs);
    destroydatamap();
    fclose(circ);
  }
 

}