Operand (const Operand &cp) {
     action = cp.GetAction();
     variable = cp.GetVariable();
     time = cp.GetTime();
     location = cp.GetLocation();
     if (cp.GetTimeRange() != NULL) {
         time_range = new string[2];
         time_range[0] = cp.GetTimeRange()[0];
         time_range[1] = cp.GetTimeRange()[1];
     } else
         time_range = NULL;
     if (cp.GetNodeRange() != NULL) {
         node_range = new string[2];
         node_range[0] = cp.GetNodeRange()[0];
         node_range[1] = cp.GetNodeRange()[1];
     } else
         node_range = NULL;
 }
bool FixMissingEntriesAndFillTheBucket(queue<Operand*> &ods, stack<string> &bucket) {
    //Fix missing entries
    queue<Operand*> temp;
    register bool inside = 0;
    temp = ods;
    while (ods.size() != 1)
        ods.pop();
    Operand *tmpod = new Operand(*(ods.front()));
    string *rt = tmpod->GetTimeRange();
    string *rl = tmpod->GetNodeRange();
    string tact = tmpod->GetAction();
    string rtime = tmpod->GetTime();
    string rloc = tmpod->GetLocation();
    ods = temp;
    //pop entire queue
    string when = BlankSpace, loc = BlankSpace;
    while (ods.size() != 0) {
        when = BlankSpace, loc = BlankSpace;
        Operand *t = new Operand(*(ods.front()));
        when.append(t->GetTime());when.append(BlankSpace);
        loc.append(t->GetLocation()); loc.append(BlankSpace);
        if (t->GetTimeRange() == NULL) {
            t->SetTimeRange(rt);
        }
        if (t->GetNodeRange() == NULL)
            t->SetNodeRange(rl);
        if (t->GetAction() == DefaultAction)
            t->SetAction(tact);
        if (t->GetTime() == DefaultWhen)
            t->SetTime(rtime);
        if (t->GetLocation() == DefaultLocation)
            t->SetLocation(rloc);
        if (t->GetTimeRange() != NULL) {
            when.append(t->GetTimeRange()[0]);
            if (t->GetTimeRange()[1] != EmptyString) {
                when.append(ToKeyword);
                when.append(t->GetTimeRange()[1]);
            }
        } else {
            when.append(DefaultWhenValue);
        }
        if (t->GetNodeRange() != NULL) {
            loc.append(t->GetNodeRange()[0]);
            if (t->GetNodeRange()[1] != EmptyString) {
                loc.append(ToKeyword);
                loc.append(t->GetNodeRange()[1]);
            }
        } else {
            loc.append(DefaultLocationValue);
        }
        if ((t->GetVariable() != DefaultComponent) || (t->GetAction() != DefaultAction)) {
            inside = 1;
            bucket.push(BlankSpace);
            bucket.push(when);
            bucket.push(loc);
            bucket.push(t->GetAction());
            bucket.push(BlankSpace);
            bucket.push(t->GetVariable());
        }
        ods.pop();
    }
    return inside;
}